You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux与macOS系统下使用ilasm编译.NET CIL中间代码?

跨平台编译CIL代码的解决方案

核心原理说明

ilasm 无论哪个平台版本,默认生成的都是PE格式的托管程序集(CLI规范的变种格式),这种程序集本身是跨平台的——.NET运行时在Linux/macOS上都能加载运行,但无法被系统直接当作原生可执行文件(Linux用ELF、macOS用mach-o)执行。要生成对应平台的原生可执行文件,需要配合.NET的发布工具完成打包。


方法一:先编译托管程序集,再跨平台发布

  1. 用ilasm编译CIL为托管程序集
    不管Windows/Linux/macOS,先编译出托管的.dll或.exe(这里的.exe是PE格式托管文件,不是原生可执行):

    # Windows环境
    ilasm mycode.il /dll /output:myassembly.dll
    # Linux/macOS环境(需先安装.NET SDK,通过dotnet调用ilasm)
    dotnet ilasm mycode.il /dll /output:myassembly.dll
    

    注:如果生成.exe,Linux/macOS上可通过dotnet myassembly.exe运行,但不能直接执行。

  2. 创建.NET项目并发布到目标平台

    • 先创建一个基础控制台项目(用于承载托管程序集):
      dotnet new console -n ILAppWrapper
      cd ILAppWrapper
      # 将编译好的托管程序集添加到项目引用
      dotnet add reference ../myassembly.dll
      
    • 执行跨平台发布命令:
      # 发布到Linux x64,生成ELF原生可执行文件
      dotnet publish -r linux-x64 -c Release --self-contained false
      # 发布到macOS x64
      dotnet publish -r osx-x64 -c Release --self-contained false
      # 发布到Windows x64
      dotnet publish -r win-x64 -c Release --self-contained false
      

    发布完成后,bin/Release/netX.X/目标运行时/publish目录下会出现对应平台的原生可执行文件(Linux下无后缀、macOS为可执行文件、Windows下为.exe)。


方法二:.NET 6+ 直接配合dotnet ilasm发布(推荐)

从.NET 6开始,dotnet ilasm支持直接生成可用于发布的项目结构,简化流程:

  1. 编译CIL并生成项目文件

    dotnet ilasm mycode.il /exe /output:myapp.exe /project
    

    该命令会自动生成myapp.csproj,无需手动创建项目。

  2. 直接发布到目标平台

    # 发布到Linux x64并打包运行时(可直接在目标系统执行,无需预装.NET)
    dotnet publish -r linux-x64 -c Release --self-contained true
    

关键注意点

  • 托管程序集本身是跨平台的,只要.NET运行环境存在,就能在任意平台通过dotnet 程序集文件名运行。
  • 生成原生平台可执行文件的核心是.NET发布工具,而非ilasm——ilasm只负责生成符合CLI规范的托管CIL代码,发布工具负责将其与运行时组件打包为目标平台支持的原生格式。

内容的提问来源于stack exchange,提问作者Gabriel Frigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:27:53