如何安装 .NET Native AOT 编译器 (ilc) 以在 dotnet 之外的命令行使用?

问题描述 投票:0回答:1

我正在用 C# 编写裸机操作系统内核,我想从命令行执行 .NET AOT 编译器,而不使用

dotnet
命令,同时避免使用 csproj 文件。

在搜索我的文件系统时,我注意到 ILC(本机 AOT 编译器)的副本存储在本地计算机上的以下位置:

C:\Users\frank\.nuget\packages\runtime.win-x64.microsoft.dotnet.ilcompiler\7.0.14"\tools

我实际上可以成功调用它,

ilc <args>
,并且它确实执行了提前编译。

不幸的是,我不知道它是如何到达那里的,我需要一种可靠的方法来设置新的构建环境。

如何确定性地安装并运行 .NET AOT 编译器? (.NET 版本 7 或 8 都可以)。

c# .net operating-system native-aot
1个回答
0
投票

我制作了一个 .NET 工具包装器来简化整个过程。要安装它,只需执行以下操作:

dotnet tool install -g ilc

...然后,您可以调用

ilc
,就像它在您的
PATH
上一样:

$ ilc --version
9.0.0-preview.6.24327.7+573461dc897731c11d6166574b77a8c3aabba220

它不需要任何更新,因为它会自动跟踪 .NET 版本。

但是,如果您想在没有工具的情况下完成此操作,请参阅下面我之前的回答。


如果您想通过 ILC 手动将 IL 程序集转换为本机代码,则必须添加相应的 NuGet 包。包的名称取决于运行时标识符 - 它的格式为

runtime.<runtime identifier>.Microsoft.DotNet.ILCompiler
。添加该包后,它将出现在您的
global-packages
目录中,您可以在其中
tools
目录下找到 ilc。

如果您没有 .NET 项目(

*.csproj
),则必须创建一个来添加 NuGet 引用:

dotnet new classlib tmp-nuget
cd ./tmp-nuget

...添加软件包,例如,对于 x86-64 (AMD64) Linux:

dotnet add package runtime.linux-x64.Microsoft.DotNet.ILCompiler --version 8.0.6

然后,找到您的

global-packages
文件夹:

$ dotnet nuget global-packages all -l
global-packages: /home/asc/.nuget/packages/

然后,把它们放在一起:

$ "/home/asc/.nuget/packages/runtime.linux-x64.microsoft.dotnet.ilcompiler/8.0.6/tools/ilc" -v
8.0.6+3b8b000a0e115700b18265d8ec8c6307056dc94d

不要忘记删除该临时目录(当然,如果您确实需要首先创建它):

cd ..
rm -rf tmp-nuget

不幸的是,我找不到直接将 NuGet 包安装到全局包目录的方法(a'la

npm
-g
标志)。即使您已经有 .NET 项目,我也建议使用临时目录,因为它添加一个
PackageReference
,这可能会在与 .NET SDK 一起使用时导致不可预见的后果。

© www.soinside.com 2019 - 2024. All rights reserved.