You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将C# .NET Core 2.0控制台应用打包为单一.exe文件?

将.NET Core 2.0控制台应用打包为单一EXE的方案

当然可以实现!不过因为你用的是.NET Core 2.0,这个版本还没有官方原生的单文件发布功能,得靠一些第三方工具或者小技巧来搞定。下面给你两个经过验证的实用方案,完美适配你“多工具放同一文件夹、通过系统路径直接调用”的需求:

方案一:使用ILMerge合并程序集

ILMerge是微软官方推出的程序集合并工具,能把你的主EXE和所有依赖的.NET DLL打包成一个独立文件:

  1. 首先通过NuGet包管理器安装ILMerge:

    Install-Package ILMerge
    
  2. 先执行你原本的发布命令生成基础文件:

    dotnet publish -c Release -r win10-x64
    
  3. 打开命令行,切换到发布输出目录(一般是bin/Release/netcoreapp2.0/win10-x64/publish),运行ILMerge命令:

    ILMerge.exe /target:winexe /out:YourSingleApp.exe YourOriginalApp.exe *.dll
    
    • /target:winexe:指定输出为Windows控制台应用类型
    • YourSingleApp.exe:替换成你想要的最终单文件名
    • YourOriginalApp.exe:替换成发布生成的原主程序文件名

    执行完成后,你就得到了一个包含所有依赖的单一EXE。

注意:ILMerge无法合并非托管DLL(比如基于C++编译的原生依赖),如果你的应用有这类文件,需要单独将它们放在EXE同目录下,或者额外处理。

方案二:使用Costura.Fody自动嵌入依赖

Costura.Fody是一个非常流行的Fody插件,它能在编译时自动把所有依赖DLL嵌入到主程序集里,运行时再动态提取使用,步骤更省心:

  1. 通过NuGet安装Costura.Fody:
    Install-Package Costura.Fody
    
  2. 安装完成后,不需要额外配置,直接执行发布命令:
    dotnet publish -c Release -r win10-x64
    
  3. 发布完成后,你会发现主EXE的体积明显变大——它已经包含了所有依赖的.NET DLL,直接复制这个EXE到目标文件夹就能运行,不需要其他附属文件。

补充:如果你的应用包含非托管DLL,Costura也支持嵌入,但需要在项目根目录的FodyWeavers.xml文件中添加相应配置,不过纯.NET依赖的场景下,默认配置就够用了。

额外提示

如果之后你升级到.NET Core 3.0及以上版本,就可以直接使用官方原生的单文件发布功能,命令如下:

dotnet publish -c Release -r win10-x64 /p:PublishSingleFile=true

但针对你当前的.NET Core 2.0环境,上面两个方案是最靠谱的选择。

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

火山引擎 最新活动