如何在ci/cd中安装CrossGen来优化.NET Core Library

Phi*_*tle 5 c# compiler-optimization .net-core coreclr

我正在尝试使用此处所述的Microsoft CrossGen 实用程序将 .NET Core 5预编译/提前 (AOT) 编译为本机映像,以缩短启动时间。

然而,获取 CrossGen的说明很模糊:

如果使用 NuGet 包安装 CoreCLR,则可以在 NuGet 包的工具文件夹中找到 CrossGen。

如何通过 NuGet 安装 CrossGen?

到目前为止我尝试过的:

  1. 创建一个写入deleteme.csproj磁盘并具有<PackageReference Include="Microsoft.NETCore.App.Runtime.win-x64" Version="3.1.6" />

  2. 跑步dotnet restore deleteme.csproj。这会将 Crossgen nuget 包下载到本地缓存。

  3. 我现在可以跑了~/.nuget/packages/microsoft.netcore.app.runtime.win-x64\3.1.6\tools\crossgen.exe

注意:我知道我可以使用独立部署可执行文件的ReadyToRun功能(如此处所述),但是我需要优化类库,因此 ReadyToRun 不起作用。

问题

  1. Nuget包有一个很大的警告

内部实现包不适合直接使用。请不要直接引用。2.这样的安装似乎不正确。我希望 CrossGen 作为dotnet 工具安装,而不需要创建一个虚拟项目并运行dotnet restore以下载缓存中的 nuget 包的副本。

在 ci/cd 构建期间是否有正确的方法来预编译 .NET Core 5库?

小智 0

如果你还没有找到这个问题的解决方案,首先,crossgen现在有一个名为crossgen2的新工具,为了获得crossgen2,你可以构建它,因为它是开源的,或者只是下载并解压缩它,因为所有nuget文件都是zip文件。crossgen 是 MSBuild 的一个内部工具,所以如果你想单独使用它,你必须使用命令行,幸运的是,crossgen 有一个内置的帮助页面,所以你希望知道你想要做什么。顺便问一下,为什么不直接使用 R2R 呢?R2R 包含 IL 和 AOT,您的应用程序使用 R2R 进行了优化,缺点是 Tomas 在这里所说的: https: //devblogs.microsoft.com/dotnet/conversation-about-ready-to-run/

Tomas:版本弹性概念和在不匹配时自动切换到运行时 JIT 还意味着给定的 R2R 应用程序可能会默默地经历性能下降,这对于最终用户来说可能很难理解。

我假设您不想使用 R2R,因为它包含 IL 和 AOT 本机映像,因为它的大小是双倍的。在这种情况下,结合 Trim、压缩的单个文件,一个空白的 dotnet 自包含程序会从 70 MB 下降到 20 MB。