news 2026/9/6 19:09:24

ASP.NET Core 仓库源码构建完全指南:从 clone、restore 到本地构建与测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ASP.NET Core 仓库源码构建完全指南:从 clone、restore 到本地构建与测试

ASP.NET Core 仓库源码构建完全指南:从 clone、restore 到本地构建与测试

【免费下载链接】aspnetcoreASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.项目地址: https://gitcode.com/GitHub_Trending/as/aspnetcore

本文基于 ASP.NET Core 官方仓库文档 BuildFromSource 与仓库内实际构建脚本,完整讲解贡献者如何在本地把 aspnetcore 仓库搭建成可构建、可调试、可测试的工作区:涵盖 fork/clone 与子模块拉取、Windows 环境一次性配置、Visual Studio / VS Code / Codespaces 三条开发路径,以及顶层构建脚本eng/build.sheng/build.cmd)的全部关键参数与推荐用法。读完本文,你将能够独立完成从克隆仓库到运行单元测试的完整闭环,并理解restoreactivate、局部build.sh等脚本在底层实际执行了什么。

一、准备工作:Fork、Clone 与子模块

如果你正在阅读本文档,大概率是希望作为贡献者在本地构建、调试和测试这个仓库的改动。整个流程假设开发机上已安装 Git。

  1. 在 GitHub 上登录并点击仓库的Fork按钮,创建属于自己的 fork。

  2. 使用git clone克隆仓库到本地。由于该仓库包含子模块,必须携带--recursive参数以同时拉取子模块源码:

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

    如果克隆时没有传--recursive,也可以随时用下面命令补拉子模块:

    git submodule update --init --recursive

    注意:后续所有步骤都针对你自己的 fork(如YOUR_USERNAME/aspnetcore),而不是官方dotnet/aspnetcore仓库。

从仓库根目录的 .gitmodules 可以看到,aspnetcore 目前声明了两个子模块:

  • src/submodules/googletest(GoogleTest,用于 C++ 单元测试)
  • src/submodules/MessagePack-CSharp(MessagePack-CSharp)

这正是克隆时必须--recursive的原因:如果这两个目录是空的,涉及它们的本地构建会缺少源码。更多子模块相关背景可参考 docs/Submodules.md。

二、Windows 一次性配置:PowerShell 执行策略与 Visual Studio C++ 组件

如果你的开发机是 Windows,还需要完成两项与操作系统相关的一次性配置:

2.1 更新 PowerShell 执行策略

打开 PowerShell 提示符,执行:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

后文所有 Windows 命令均默认在 PowerShell 提示符下执行。

2.2 安装包含 C++ 组件的 Visual Studio

即使你不打算用 Visual Studio 构建,也建议安装它,以获取必需的 C++ 组件和本机工具链。请使用仓库自带的官方安装脚本来安装:

即使机器上已装有 Visual Studio,也推荐运行这个安装脚本,确保安装了正确的 VS 组件。如果只是想修改现有安装,可以按官方“从配置文件安装”的说明,使用仓库根目录下的.vsconfig文件导入配置。

./eng/scripts/InstallVisualStudio.ps1 -Edition Enterprise -Channel Preview

Enterprise换成ProfessionalCommunity可切换你偏好的版本。当前要求使用 Preview 通道,因为它支持仓库正在使用的预览版 SDK(见 global.json 中固定的11.0.100-rc.1.26420.103)。

如果你看到类似the imported project "....\aspnetcore.tools\msbuild\17.1.0\tools\MSBuild\Microsoft\VC\v170\Microsoft.Cpp.Default.props" was not found的错误,通常是 VS 组件缺失或过旧,按上面的方式重新安装/更新 Visual Studio 即可。

三、开发路径一:Visual Studio(仅 Windows)

完成上面的通用配置后,具体操作取决于你选择的开发环境,这里以 Visual Studio 为例:

  1. 该仓库包含 JavaScript 依赖,因此你需要安装 Node.js。

  2. 在 Visual Studio 打开项目之前,先运行仓库根目录的restore.cmd脚本安装依赖并初始化仓库:

    ./restore.cmd

    从 restore.cmd 的源码看,它实际只是调用eng/build.ps1 -all -nobuild -restore,即“恢复全部项目类型但跳过编译”,因此它安装的是构建所需的 .NET SDK 与工具链(安装位置由 global.json 的paths: [".dotnet"]指定为仓库内的.dotnet目录)。

  3. 你通常只关注仓库中的某一块项目。可以用startvs.cmd在特定项目区域启动 Visual Studio。例如启动src/Http区域,先在该目录构建,再启动 VS:

    cd src/Http ./build.cmd ./startvs.cmd

    build.cmd/build.sh脚本位于你所打开的项目目录内(如src/Http目录下的那个)。若想构建整棵树,请使用eng目录下的build.cmd/build.sh

    从源码看,这两个脚本的分工非常清晰:

    • 局部脚本 src/Http/build.sh 只有一行核心逻辑:"$repo_root/eng/build.sh" --projects "$DIR/**/*.*proj" "$@",即把当前目录下所有*.csproj/*.fsproj等工程传给顶层构建脚本,因此“局部构建”本质上是顶层脚本加一个--projects过滤;
    • startvs.cmd 则把DOTNET_ROOT指向仓库内.dotnet、把本地dotnet.exe放到PATH最前,然后用devenv.com打开src/Http下指定的.slnf文件(src/Http/startvs.cmd),保证 IDE 内构建使用与命令行脚本同一套本地 SDK。

关于 Solution Filter(.slnf)文件

仓库有一个覆盖全部 ASP.NET Core 的解决方案文件,但大多数人不会直接用它,因为 Visual Studio 对这种规模的项目处理能力有限。取而代之的是大量 Solution Filter(.slnf)文件,每个只包含一组相关项目的子集。以 src/Http/HttpAbstractions.slnf 为例,它通过 JSON 格式声明指向根级AspNetCore.slnx并筛选出 Hosting、DataProtection、Http 系列、TestHost 等一组项目。仓库维护.slnf的原则:

  • 解决方案文件不被 CI 或命令行构建脚本使用,仅供开发者使用;
  • 它们把“经常被一起编辑”的工程聚合在一起;
  • 找不到包含你关注项目的解决方案?欢迎提 PR 增加新的.slnf文件。

完成以上步骤后,即可在 Visual Studio 中构建、调试、测试你的改动。

四、开发路径二:VS Code 或其他编辑器(Windows / Linux / macOS)

这些步骤同样适用于其他编辑器:如果使用别的编辑器,把下文中的code替换为对应启动命令即可(例如vim)。

  1. 需要安装 VS Code,并且能从命令行启动code

  2. 仓库有 JavaScript 依赖,需要安装 Node.js。

  3. 在 VS Code 打开任何东西之前,先运行根目录的restore脚本安装 .NET 依赖:

    # Linux 或 Mac ./restore.sh
    # Windows ./restore.cmd
  4. restore完成后,运行激活脚本启用本地安装的 .NET:

    # Linux 或 Mac source activate.sh
    # Windows - 注意开头的“点 + 空格” . ./activate.ps1

    activate.sh 做的事情是:把DOTNET_ROOT设置为$DIR/.dotnet,并将其放到PATH最前面,还会给 shell 提示符加上仓库名作为视觉标识;运行deactivate可还原环境。如果.dotnet/dotnet不存在,脚本会提示先运行restore.sh

  5. 激活后,进入要修改的项目目录并用编辑器打开,例如src/Http

    cd src/Http code .
  6. 在终端中运行项目目录内的./build.sh构建并测试:

    # Linux 或 Mac ./build.sh ./build.sh -test
    # Windows ./build.cmd ./build.cmd -test

    同样地,脚本位于你打开的项目目录内;构建整棵树请用eng目录下的build.sh/build.cmd

  7. 另一种方式:在激活本地 SDK 之后,直接使用dotnet builddotnet test但必须带上具体的项目文件。例如:

    # Linux 或 Mac source activate.sh dotnet build dotnet test --filter "MySpecificUnitTest"
    # Windows . ./activate.ps1 dotnet build dotnet test --filter "MySpecificUnitTest"

    之所以要求“带具体项目文件”,是因为顶层仓库没有可一键全量构建的单一工程,dotnet build只应在某个*.csproj/*.fsproj所在目录执行。

五、开发路径三:GitHub Codespaces

如果你的 GitHub 账户启用了 Codespaces,可以直接使用云端的 VS Code 环境来修改代码:

  1. 进入你的 fork,选择要修改的分支。如果还没有工作分支,先通过 Web 界面或本地 checkout 后 push 创建。

  2. 点击Code按钮 →Codespaces选项卡 →Create codespace打开该分支的 Codespace。初始化会花费几分钟,完成后即可在基于 Web 的 VS Code 环境中工作。

  3. 在 Codespace 中直接使用dotnet builddotnet test构建和测试仓库内的具体项目。

    不需要手动激活本地 .NET SDK,也不需要运行restore脚本——这些步骤会在 Codespace 初始化过程中自动完成。

六、构建脚本指南:eng/build.sh(eng/build.cmd)的深入解析

仓库包含位于eng/build.cmdeng/build.sh的顶层构建脚本,以及各子目录内的局部构建脚本。这些脚本支持一系列标志位,可用于 restore、build、test 等操作。本节文档化常见参数与推荐调用方式。

官方不推荐运行仓库顶层构建脚本来构建整个仓库——你很少需要构建全部工程,构建子项目通常就足以支撑你的工作流。

6.1 常见参数

可传给build.cmd/build.sh的常见参数:

参数说明
ConfigurationDebugRelease。默认 =Debug(CI 场景下默认Release)。
TargetArchitecture目标 CPU 架构(x64、x86、arm、arm64)。
TargetOsName目标基础 RID(win、linux、osx、linux-musl)。

从 eng/build.sh 的完整用法输出看,脚本实际支持的参数远比上表丰富,常用的还包括:

参数说明
--[no-]restore/--[no-]build控制是否恢复依赖、是否编译(--no-build隐含--no-restore)。
--[no-]pack/--[no-]publish控制是否产出 NuGet 包、是否执行 publish。
--[no-]test是否运行测试。
--projects指定要构建的项目列表(绝对路径,支持 glob,如$(pwd)/**/*.csproj),这正是各子目录局部build.sh的内部实现方式。
--no-build-deps不构建项目间引用,只构建指定项目。
--all构建所有项目类型(managed、native、nodejs、java、installers)。
--[no-]build-native是否构建 C/C++ 原生项目。
--[no-]build-managed是否构建 C#/F#/VB 托管项目。
--[no-]build-nodejs是否构建 NodeJS/TypeScript 项目。
--[no-]build-java是否构建 Java 项目(SignalR Java 客户端)。
--[no-]build-installers是否构建 Windows 安装器。
--verbosity/--binarylogMSBuild 日志级别与二进制日志开关。
--warnAsError/--warnNotAsError控制警告即错误的行为。

几个值得注意的默认行为(可直接在脚本源码中验证):

  • 不带任何项目选择参数时,脚本默认构建managed(C#)组及其依赖,并打印提示;
  • managed构建开启且 PATH 中检测到node时,会自动连带开启 NodeJS 项目构建;反之会警告“managed 项目将回退使用上一次构建的 NodeJS 产物,可能不是最新”;
  • --no-build-native --no-build-managed组合可快速只做工具链初始化与恢复,是restore的轻量替代。

6.2 常见调用方式

命令作用
.\build.cmd -Configuration ReleaseRelease配置构建子目录中的项目。可在任意项目子目录运行。
.\build.cmd -test运行当前项目的全部单元测试。可在任意项目子目录运行。

6.3 仓库级调用

虽然更推荐项目级构建脚本,但eng目录下的仓库级脚本也支持项目级调用:

命令作用
.\eng\build.cmd -all -pack -arch x64构建仓库中所有 shipping 项目的开发包。必须从仓库根目录运行。
.\eng\build.cmd -test -projects .\src\Framework\test\Microsoft.AspNetCore.App.UnitTests.csproj运行Microsoft.AspNetCore.App.UnitTests项目的全部单元测试。
.\eng\build.cmd -noBuildNative -noBuildManaged构建仓库但跳过原生与托管项目,是./restore.cmd的更快速替代方案。必须从仓库根目录运行。

七、仓库依赖完整清单

为了支撑仓库内各项目的构建与测试,需要安装若干依赖。一部分与你要开发的项目区域无关、始终必需;另一部分则按项目可选。大部分必需依赖由restore脚本自动安装,或已随现代操作系统默认提供,或由 Visual Studio 安装器自动装好。

7.1 必需依赖

依赖用途
Git用于仓库的克隆、分支等源码控制操作。
.NET仓库内构建使用的是 .NET SDK 的预览版,由restore脚本自动安装(安装到仓库内.dotnet目录,版本固定在 global.json 中)。
curl / wget用于从 Web 下载安装文件与资源。
tar用于解压安装资源。macOS、Linux 与 Windows 10 及以上系统默认自带。

7.2 可选依赖

依赖用途备注
Selenium运行Components(即 Blazor)项目的集成测试。
Playwright运行ProjectTemplates中的模板测试。
Chrome在上述项目中使用 Selenium 或 Playwright 运行测试时必需;使用 Playwright 时该依赖会自动安装。
Java Development Kit(v11 或更新)构建 SignalR Java 客户端时需要。Windows 上可用./eng/scripts/InstallJdk.ps1脚本安装。确保JAVA_HOME指向安装目录,且PATH包含$(jdkInstallDir)/bin文件夹。
Wix处理 Windows 安装器项目 时需要。
Node.js构建仓库中的 JavaScript 资源(如 Blazor、SignalR 相关)。至少需要当前 NodeJS LTS 版本。

八、故障排查

如果构建过程中遇到常见错误,请查阅仓库文档 BuildErrors,其中列出了构建仓库时可能遇到的常见问题及对应处理方法。

【免费下载链接】aspnetcoreASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.项目地址: https://gitcode.com/GitHub_Trending/as/aspnetcore

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 19:09:02

IPD+OKR+PLM:构建企业产品研发管理体系的核心逻辑

简介:面向企业研发管理者、项目经理及咨询顾问的《企业产品研发管理体系构建指南》PPT课件,系统讲解IPD集成产品开发与CMMI、OKR、PLM的融合落地,覆盖产品规划、战略、立项、目标设定、进度控制、版本管理、团队领导力等完整闭环,…

作者头像 李华
网站建设 2026/9/6 19:05:33

Hadoop集群搭建与MapReduce开发实战:从规划到调优的完整指南

简介:面向大数据初学者和需要快速搭建Hadoop平台的技术人员,这是一份Hadoop集群搭建与MapReduce程序开发的完整操作文档。文档基于VM虚拟机中Ubuntu Kylin 16.04.4环境,涵盖SSH无密码登录、Java环境配置、Hadoop集群网络与分布式配置&#xf…

作者头像 李华
网站建设 2026/9/6 18:58:08

272页华为战略管理法读书笔记:从BLM模型到PPTX文件修复全解析

简介:《华为战略管理法》读书笔记以272页PPT完整呈现华为DSTE战略管理体系,从战略制定、战略解码、战略执行与监控到战略评估逐一拆解,适合企业管理者、战略规划人员、组织变革从业者及内部培训讲师参考使用,帮助读者建立从机会识…

作者头像 李华