从源生成 .NET CoreBuild .NET Core from source

本文内容

能从 .NET Core 的源代码生成它在多个方面都体现出其重要性:能更轻松地将 .NET Core 移植到新平台;可实现对产品做出贡献和修复;并支持创建自定义版本的 .NET。本文为想生成和分发自己的 .NET Core 版本的开发人员提供指导。

从源生成 CLRBuild the CLR from source

有关 .NET CoreCLR 的源代码,可以访问 GitHub 上的 dotnet/coreclr 存储库。

生成目前依赖于以下系统必备组件:

  • Git
  • CMake
  • Python
  • C++ 编译器。安装完这些必备组件后,可以 dotnet/coreclr 存储库为基础,调用生成脚本(Windows 中的 build.cmd,或 Linux 和 macOS 中的 build.sh)生成 CLR。

组件的安装因操作系统 (OS) 而异。请参阅特定 OS 的生成说明:

生成具有两个主要的 buildTypes

  • 调试(默认)- 以最低优化水平编译运行时并进行额外的运行时检查(断言)。这种优化级别的降低和额外的检查会减慢运行时的执行速度,但对于调试来说是很有价值的。这是开发和测试环境的推荐设置。
  • 发布 - 以完全优化水平编译运行时,无需进行额外的运行时检查。这将产生更快的运行时性能,但需要更长时间进行生成,并且难以进行调试。将 release 传递给生成脚本以选择此生成类型。此外,默认情况下,生成不仅会创建运行时可执行文件,还会生成所有测试。这其中有不少测试都需花费大量时间,但如果只想试验一下更改,则不必执行此操作。可以通过向生成脚本添加 skiptests 参数来跳过测试生成,如下例所示(在 Unix 计算机上将 .\build 替换为 ./build.sh):
  1. .\build skiptests

之前的示例演示了如何生成 Debug 风格,该风格启用了开发时间检查(断言)并禁用优化。若要生成发布(全速)风格,请执行以下操作:

  1. .\build release skiptests

可使用 -? 或 -help 限定符找到更多生成选项。

使用生成Using Your Build

生成将其所有生成的文件放在存储库底部的 bin 目录下。bin\Log 目录包含生成期间生成的日志文件(生成失败时这些日志最为有用)。实际输出位于bin\Product[平台].[CPU 体系结构].[生成类型] 目录中,如 bin\Product\Windows_NT.x64.Release 。

虽然生成的“原始”输出有时很有用,但通常只需要 NuGet 包,这些包位于之前输出目录的 .nuget\pkg 子目录中。

可通过两种基本方法使用新的运行时:

  • 使用 dotnet.exe 和 NuGet 撰写应用程序 。请参阅使用生成了解如何通过使用刚创建的 NuGet 包和“dotnet”命令行接口 (CLI) 来创建使用你的新运行时的程序。非运行时开发人员常通过此方法使用你的新运行时。

  • 使用 corerun.exe 运行通过未打包的 DLL 运行应用程序 。此存储库还定义了一个名为 corerun.exe 的简单主机,它与 NuGet 没有任何依赖关系。需要告诉主机在何处获取实际使用的所需 DLL,且必须手动将它们聚集在一起。dotnet/coreclr 存储库中的所有测试都使用这种方式,可用于快速本地“编辑-编译-调试”循环(如初步单元测试)。有关使用此方法的详细信息,请参阅使用 CoreRun.exe 执行 .NET Core 应用

从源生成 CLIBuild the CLI from source

有关 .NET Core CLI 的源代码,可以访问 GitHub 上的 dotnet/cli 存储库。

为了生成 .NET Core CLI,需要在计算机上安装以下项。

  • Windows 和 Linux:
    • PATH 上的 git
  • macOS:
    • PATH 上的 git
    • Xcode
    • OpenSSL若要进行生成,请在 Windows 上从根运行 build.cmd,在 Linux 和 macOS 上从根运行 build.sh如果不希望执行测试,请运行 build.cmd -t:Compile./build.sh -t:Compile若要在 macOS Sierra 中生成 CLI,需通过运行 export DOTNET_RUNTIME_ID=osx.10.11-x64 设置 DOTNET_RUNTIME_ID 环境变量。

使用生成Using your build

使用 artifacts/{os}-{arch}/stage2 中的 dotnet 可执行文件来试用新生成的 CLI。如果想在从当前控制台调用 dotnet 时使用生成输出,也可以将 artifacts/{os}-{arch}/stage2 添加到 PATH。

另请参阅See also