How to compile CIL code (intermediate code used on .NET) using ilasm for Linux and OSX?

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

我使用

runtime.win-x64.Microsoft.NETCore.ILAsm
nuget 来获取 ilasm.exe 来编译我的 CIL 代码。它为 windows .exe PE 正确编译了所有内容,但显然它没有为 Linux 和 MacOS 编译...

我知道使用 .NET 5.0 或更新版本的

dotnet --runtime
命令可以针对任何支持的操作系统进行编译。如何使用 CIL 而不是 C# 来做到这一点?我以为它在使用
ilasm.exe
,但显然这是不可能的,那么解决方案是什么?

注意:我已经用过linux

ilasm
在linux上编译的代码是一个.exe PE,在linux上不起作用的扩展和格式(linux使用ELF格式)

.net linux macos cil ilasm
2个回答
0
投票

如果你正在做实验,你可以用Mono运行时运行

.exe
mono your.exe
.

虽然.NET CLI也应该接受它

dotnet your.exe
,但您需要添加支持文件,例如
.dep.json
,以指定运行时等信息。

顺便说一句,就像评论指出的那样,在 .NET Core SDK 中使用本机 IL 支持是更好的方法。


0
投票

为了编译 MSIL,我使用以下模板:

ProjectName
|- ProjectName.ilproj
|- Program.il

ProjectName.ilproj
内容:

<Project Sdk="Microsoft.Net.Sdk.il/7.0.0">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
  </PropertyGroup>
</Project>

Program.il
内容:

.assembly extern mscorlib {}
.assembly 'App' {}

.class private auto ansi beforefieldinit abstract sealed Program extends [mscorlib]System.Object {
    .method private hidebysig static void Main ( string[] args) cil managed {
        .entrypoint

        ldstr "hw"
        call void [mscorlib]System.Console::WriteLine(string)

        ret
    }
}

此设置使我可以毫无问题地编译程序。命令

dotnet build -r linux-x64 --self-contained -c release
dotnet build -r win-x64 --self-contained -c release
似乎可以工作并产生一些特定于平台的输出

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