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

如何生成不含IL、JIT、元数据的轻量.NET单文件.exe

生成依赖系统.NET运行时的轻量原生EXE文件

要生成不含IL、JIT、元数据,且不嵌入.NET DLL的轻量单EXE,核心是用.NET的Native AOT发布功能,同时指定依赖系统全局安装的.NET运行时,而非打包运行时组件。最终生成的是纯原生机器码EXE,体积通常只有几MB。

具体操作步骤:

  • 确认项目兼容性
    项目需为控制台、Windows Forms或WPF应用,目标框架至少选.NET 7(推荐.NET 8,Native AOT支持更成熟)。同时要排查移除项目里不兼容AOT的特性,比如动态反射加载、部分非AOT友好的NuGet包。

  • 修改项目配置文件
    打开.csproj(C#)或.vbproj(VB.NET)文件,添加以下配置:

    <PropertyGroup>
      <PublishAot>true</PublishAot>
      <SelfContained>false</SelfContained> <!-- 关键:不打包运行时,依赖系统全局.NET -->
      <PublishSingleFile>true</PublishSingleFile>
      <PublishTrimmed>true</PublishTrimmed> <!-- 可选:裁剪冗余代码进一步减小体积 -->
    </PropertyGroup>
    
  • 执行发布命令
    打开终端切换到项目目录,运行发布命令(以x64平台为例):

    dotnet publish -c Release -r win-x64 --no-self-contained
    

    按需替换win-x64为win-x86或win-arm64以匹配目标机器架构。--no-self-contained参数会明确告知编译器不要把.NET运行时打包进EXE。

  • 验证结果
    发布完成后,在bin/Release/net[版本号]/win-x64/publish目录下就能找到单个EXE文件。这个文件是纯原生机器码,没有IL、JIT编译器,也不会嵌入.NET DLL,运行时会自动调用系统中已安装的对应版本.NET运行时。

注意事项:

  • 目标机器必须预先安装好对应版本的.NET运行时(比如用.NET 8发布,目标机器就得装.NET 8 Runtime)
  • 如果项目用到了动态反射这类特性,需要额外创建rd.xml文件配置AOT兼容规则,否则可能出现运行错误
  • VB.NET项目完全适用上述配置,只需修改对应的.vbproj文件即可

内容的提问来源于stack exchange,提问作者Remus Rigo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 22:03:13