编译 dotnet和aspnetcore 源代码详情

 更新时间:2022年3月14日 21:39  点击:377 作者:My IO

前言:

为 dotnet/aspnetcore 修改 issue,但是在 clone 代码后,发现要编译成功,远没有想象中那么容易。

因此,将整个过程进行记录,以供大家参考。

​以下操作都是在 Windows 10 下完成。​

0.环境准备

详见官方文档:《使用源码编译 ASP.NET Core》中的“Step 2: Install pre-requisites”。

我的机器只提前装了 Visual Studio 2022,JDK 和 NodeJS。

大家可以自行按需安装。

1.还原存储库

按照 ​BuildFromSource.md​ 的描述,在命令行窗口进入代码所在目录,输入如下命令开始还原存储库:

restore.cmd

等待少许,就碰到了第一个错误:

这一看就是下载超时了,​​这该死的网络!​​

2.暗渡陈仓

找到下载命令所在文件 ​​.dotnet\dotnet-install.ps1​​,发现代码逻辑比较复杂,不太好修改。

​不过,转念一想,既然远程下载慢,那不如改成从本地下载!​

根据上面报错的下载链接,找到获取下载地址的代码:

function Get-Feeds-To-Use()
{
    $feeds = @(
    "https://dotnetcli.azureedge.net/dotnet",
    "https://dotnetbuilds.azureedge.net/public"
    )

    if (-not [string]::IsNullOrEmpty($AzureFeed)) {
        $feeds = @($AzureFeed)
    }

    if ($NoCdn) {
        $feeds = @(
        "https://dotnetcli.blob.core.windows.net/dotnet",
        "https://dotnetbuilds.blob.core.windows.net/public"
        )

        if (-not [string]::IsNullOrEmpty($UncachedFeed)) {
            $feeds = @($UncachedFeed)
        }
    }

    return $feeds
}

修改成从本地下载:

function Get-Feeds-To-Use()
{
    $feeds = @(
    "http://localhost:12345/dotnet"
    )

    return $feeds
}

现在,只需要在本地创建 IIS 站点,每次报错后终止程序。

再根据报错链接,使用下载工具下载原始链接,放置在本地站点对应目录,然后重新运行 ​​restore.cmd​​ 即可。

​吐槽一下:其中一个文件下了4个小时。囧rz​

3.获取 submodule 源码

经过多次重试,总算全部下载成功了。

但是,又显示了另一个错误:

参照 BuildFromSource.md,发现我们 clone 时掉了参数 ​​--recursive​​:

git clone --recursive https://github.com/YOUR_USERNAME/aspnetcore

幸好还可以补救:

git submodule update --init --recursive

重新运行​​restore.cmd​​ 顺利完成。

4.编译

但是,当我们使用 VS2022 编译 dotnet/aspnetcore 的任意一个项目时,却提示找不到指定SDK:

原来它是在找 SDK 7.0:

"sdk": {
    "version": "7.0.100-preview.2.22103.2"
  }

而这个 SDK 其实在前面的步骤已经安装在源码目录下了。

因此,只需要将源码目录下 SDK 路径,例如 ​​E:\Codes\aspnetcore\.dotnet\sdk​​​,加入到 ​​PATH​​ 环境变量中。

5.测试

但是,当我们运行测试时,却提示找不到测试用例。

根据错误提示:

我们把源码目录下的对应路径下的所有内容, 例如 ​​E:\Codes\aspnetcore\.dotnet\shared\Microsoft.NETCore.App​​​,复制到 ​​C:\Program Files\dotnet\shared\Microsoft.NETCore.AppA​​ 目录中。

再次运行测试成功.

结论:

这次编译碰到的主要问题,还是由于访问国外的网速太慢造成的。

但是和用于 dotnet/runtime 的解决思路不同。

到此这篇关于编译 dotnet/aspnetcore 源代码详情的文章就介绍到这了,更多相关编译dotnet/aspnetcore 内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

原文出处:https://blog.51cto.com/MyIO/5049070

[!--infotagslink--]

相关文章

  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • VSCode C++多文件编译的简单使用方法

    这篇文章主要介绍了VSCode C++多文件编译的简单使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
  • Vue3 编译流程-源码解析

    今天将从 Vue 的入口文件开始,看看声明了一个 Vue 的单文件之后是如何被 compile-core 编译核心模块编译成渲染函数的。下面小编讲解并附上代码分析展现在文章里,感兴趣的小伙伴不要错过奥...2021-09-25
  • vscode和cmake编译多个C++文件的实现方法

    这篇文章主要介绍了vscode和cmake编译多个C++文件的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • 使用 C# 动态编译代码和执行的代码

    一个控制台例子, 演示了如何用 C# 动态的生成代码, 编译代码, 最后执行...2020-06-25
  • PHP单例模式静态类解析和实现源代码

    我们建站的时候,开始是每次请求数据库都要重新连接的、这样显然不合理、然后自己封装了一个数据库操作类、DBTools.php、要解决一个连接多次使用的话、最好的办法是使...2016-11-25
  • jsp 自动编译机制详细介绍

    这篇文章主要介绍了 Jasper的自动检测实现的机制比较简单,依靠某后台线程不断检测JSP文件与编译后的class文件的最后修改时间是否相同,若相同则认为没有改动,但倘若不同则需要重新编译,需要的朋友可以参考下...2016-12-02
  • QT5编译使用QFtp的方法步骤

    这篇文章主要介绍了QT5编译使用QFtp的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-04
  • php读取本地php文件源代码输出显示

    下在看一个利用fopen,file_get_contents读取本地服务器中.php文件的代码并显示的一些方法总结 如我有两个文件a.php,b.php。 a.php文件中的语句是: 代码如...2016-11-25
  • 手把手教你如何编译打包video.js

    这篇文章主要介绍了编译打包video.js的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2020-12-09
  • 解析C语言与C++的编译模型

    C++继承了C的编译模型,C语言的编译链接模型相对简洁,但C++继承了这些机制之后变得更加复杂难以理解,这里就来带大家简要解析C语言与C++的编译模型...2020-04-25
  • Windows系统下Eclipse搭建ESP32编译环境及安装过程

    Ecppse 使用了 ESP-IDF 中的 Makefile 支持。这意味着您需要从创建 ESP-IDF 项目开始。您可以使用 github 中的 idf-template 项目,接下来通过本文给大家介绍Windows系统下Eclipse搭建ESP32编译环境及安装过程,感兴趣的朋友一起看看吧...2021-10-18
  • 基于C++自动化编译工具的使用详解

    本篇文章是对C++中自动化编译工具的使用进行了详细的分析介绍,需要的朋友参考下...2020-04-25
  • 解决php编译中遇到各种error办法

    php编译安装碰到各种的问题了,我们这里整理了一篇关于解决php编译中遇到各种error办法的文章,希望此文章能够为各位带来帮助呀。 1) Configure: error: xml2-config...2016-11-25
  • Shell脚本构建Docker 半自动化编译打包发布应用操作

    这篇文章主要介绍了Shell脚本构建Docker 半自动化编译打包发布应用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-30
  • dotnet core链接mongodb代码实例

    这篇文章主要介绍了dotnet core链接mongodb代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-25
  • go select编译期的优化处理逻辑使用场景分析

    select 是 Go 中的一个控制结构,类似于用于通信的 switch 语句。每个 case 必须是一个通信操作,要么是发送要么是接收。接下来通过本文给大家介绍go select编译期的优化处理逻辑使用场景分析,感兴趣的朋友一起看看吧...2021-06-28
  • C/C++编译器GCC下的常用编译命令总结

    这篇文章主要介绍了C/C++编译器GCC下的常用编译命令总结,本文的示例环境为Linux系统,需要的朋友可以参考下...2020-04-25
  • 编译安装redisd的方法示例详解

    这篇文章主要介绍了编译安装redisd的方法示例详解,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-15
  • .NET的动态编译与WS服务调用详解

    这篇文章介绍了.NET的动态编译与WS服务调用详解,有需要的朋友可以参考一下,希望对你有所帮助...2021-09-22