如何编译 dotnet/aspnetcore 源代码

前言

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

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

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

0.环境准备

详见官方文档:《使用源码编译 ASP.NET Core》(https://github.com/dotnet/aspnetcore/blob/main/docs/BuildFromSource.md) 中的“Step 2: Install pre-requisites”。

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

大家可以自行按需安装。

1.还原存储库

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

restore.cmd

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

31ba1e5bf17e32f4a5c283c76f82c3a0.png

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

fce0e5913bc0ec8705d963001b805c5a.png

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
}

ef2faaaf1a0f72ef5a7c7cb686bcb9d3.png

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

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

19778fca2ee9c827c806511d15f00481.png

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

3.获取 submodule 源码

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

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

5109fdb3c8f6dc852fca56b0514dbc7d.png

参照 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:

c56bb94946567f35f3bca54523c887c0.png

原来它是在找 SDK 7.0:

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

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

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

5.测试

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

根据错误提示:

a91b45f044b2e1033aba5344e1752e5b.png

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

再次运行测试成功.

结论

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

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

如果你在编译 dotnet/aspnetcore 的源代码时碰到其它问题,欢迎到我的公众号“My IO”留言讨论

a041300abef0df75527283beca7bebf7.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看Linux进程CPU过高具体的线程堆栈(不中断程序)

转自:http://blog.csdn.net/mergerly/article/details/47731305 1、TOP命令,找到占用CPU最高的进程 [plain] view plaincopy $ top top - 20:11:45 up 850 days, 1:18, 3 users, load average: 1.04, 1.01, 0.99 Tasks: 61 total, 1 running, …

linux 编译工具链,Linux工具链for TKStudio下载_Linux工具链for TKStudio官方下载-太平洋下载中心...

Linux工具链for TKStudio是一款支持TKStudio IDE集成开发环境的辅助LINUX交叉编译工具链软件,交叉编译就是跨架构编译,编译出来的程序不能在本机执行(当然有例外情况)。所以这个时候就需要交叉编译工具链。译工具链一般最简化的为 binutils gcc glibc …

pom.xml配置详解

http://blog.csdn.net/uohzoaix/article/details/7035307转载于:https://www.cnblogs.com/friends-wf/p/3829580.html

Android之在Activity中动态得到Adapter类中数据

1、问题 Activity中动态得到Adapter数据2、解决办法 在Adapter中写入接口Class Adapter {Interface A {void onClick(int a, int b);}A a;public void setListen (A a) {this.a a;}public void A (int a, int b) {if (a ! null ) {a.onClick(a, b);}}} class MainActivity ex…

Convolutional Neural Networks for Visual Recognition 1

Introduction 这是斯坦福计算机视觉大牛李菲菲最新开设的一门关于deep learning在计算机视觉领域的相关应用的课程。这个课程重点介绍了deep learning里的一种比较流行的模型:Convolutional Neural Networks,简称CNN,主要利用CNN来做visual r…

记一次 .NET 某供应链WEB网站 CPU 爆高事故分析

一:背景 1. 讲故事年前有位朋友加微信求助,说他的程序出现了偶发性CPU爆高,寻求如何解决,截图如下:我建议朋友用 procdump 在 cpu 高的时候连抓两个dump,这样分析起来比较稳健,朋友也如期的成功…

html5做的太阳系

效果图&#xff1a; 源代码&#xff1a; <!DOCTYPE html><html><head><meta charset"UTF-8"> <title></title></head><body><canvas id"canvas" width"1000" height"1000" style&…

html中#include file的使用方法

有两个文件a.htm和b.htm&#xff0c;在同一文件夹下a.htm内容例如以下 <!-- #include file"b.htm" --> b.htm内容例如以下 今天&#xff1a;雨 31 ℃&#xff5e;26 ℃ <br />明天&#xff1a;雷阵雨 33 ℃&#xff5e;27 ℃ 直接在浏览器中打开a&#…

Android之第一次不显示EditText光标

1、问题 光标会默认显示在第一个EditText框中&#xff0c;如果不想显示光标&#xff0c;且也不想把该光标移动到下一个EditText框。2、解决办法 在该 EditText之前增加一个不可见的LinearLayout<LinearLayout android:focusable"true"android:focusableInTouchMod…

读取bmp图片数据

1 public void getBMPImage(String source) throws Exception {2 3 clearNData(); //清除数据保存区4 FileInputStream fs null;5 6 try {7 fs new FileInputStream(source);8 int bfLen 14;9 …

Windows 11 任务管理器重磅升级!界面迎来全新设计,十年来首次大改!

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软近日发布了 Windows 11 预览版 Build 22557。在此版本中&#xff0c;任务管理器迎来了全新的设计&#xff0c;这是其自 Windows 8 以来的首次变更&#xff0c; 也是任务管理器十年来最大的一次升级。史诗级更新&#xff0…

modbus调试工具 linux,linux libmodbus的移植

1.前言Modbus是一个工业通信系统&#xff0c;由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。2.移植步骤第一&#xff0c;进入libmodbus目录下&#xff0c;在交叉编译器是最好…

Android之用 ExpandableListView使用解析(三级列表的实现)

&#xfeff;&#xfeff;Android之用 ExpandableListView使用解析&#xff08;三级列表的实现&#xff09; 下载地址如下&#xff1a;http://download.csdn.net/download/u011068702/9839848

微博自媒体,一个新的生态

昨日&#xff0c;微博、UC和360&#xff0c;三方宣布将联合打造自媒体平台&#xff0c;这是继微信公众平台、搜狐新闻客户端、百度百家、今日头条之后的又一大自媒体平台。自媒体平台之争正愈演愈烈&#xff0c;而这对自媒体人和读者来说都算是好事。为何巨头们钟爱自媒体起初微…

开发者说PaddleOCR的.NET封装与应用部署

本项目是一个基于PaddleOCR的C代码修改并封装的.NET的工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能&#xff0c;同时针对小图识别不准的情况下&#xff0c;做了优化&#xff0c;提高识别准确率。项目包含总模型仅8.6M的超轻量级中文OCR&#x…

转载 雨松mono Unity获取游戏对象详解(来自我的长微博)

Unity获取游戏对象详解&#xff08;来自我的长微博&#xff09; 转载 自 雨松mono 本文固定链接: http://www.xuanyusong.com/archives/2768转载请注明: 雨松MOMO 2014年06月16日 于 雨松MOMO程序研究院 发表我觉得Unity里面的Transform 和 GameObject就像两个双胞胎兄弟一样&a…

ps之解决eps图片不能保存为png格式问题

1、问题 eps图片不能保存为png问题&#xff0c;日了狗 2、解决办法 原因&#xff1a; 在cmyk模式下&#xff0c;png不支持印刷输出的CMYK模式 在lab模式下&#xff0c;png或jpg不能存储LAB模式的色彩信息 将图片保存为png方法步骤&#xff1a; 图像——模式——选择RGB模式 3、…

linux怎么看是否安装kde桌面,ubuntu 7上安装kde桌面

开始使用Red Hat是因为一次服务器配置的需要&#xff0c;学院的精品课程建设需要自己建立一个支持JSP/Servlet 的服务器&#xff0c;由于以前做开发一直在windows平台下开发很少在linux下进行开发&#xff0c;最多也就是在linux 下进行测试。不过Red Hat的体积确实不敢恭维&am…

CSHOP后台设置SMTP发邮件提示 Error: need RCPT command 错误解决

其实错误原因并不是因为此错误&#xff0c;经检测&#xff0c;邮件服务器返回的真实错误是 501 mail from address must be same as authorization user 。只因为同时返回了 503 Error: need MAIL command 和 503 Error: need RCPT command &#xff0c;而ECSHOP只提示了最后一…

AngularJS之watch

简介 首先apply方法会触发evel方法&#xff0c;当evel方法解析成功后&#xff0c;会去触发digest方法&#xff0c;digest方法会触发watch方法。 在digest执行时&#xff0c;如果watch观察的的value与上一次执行时不一样时&#xff0c;就会被触发。 AngularJS内部的watch实现了页…