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

.NET 5环境下如何将NuGet包及其依赖打包为单个可执行文件?

.NET 5 全依赖单文件打包解决方案

问题根因

你之前发布时残留DLL是因为缺少了SelfContained和IncludeAllContentForSelfExtract两个核心参数,.NET 5 默认的单文件发布不会主动把所有原生依赖、运行时文件都嵌入exe内。

两种实现方式

方式1:直接使用完整参数的发布命令

指定目标运行时+全嵌入参数即可,示例为Windows 64位环境打包,你可以根据需要替换运行时标识(比如linux-x64、osx-x64):

dotnet publish -c Release -r win-x64 /p:PublishSingleFile=true /p:SelfContained=true /p:IncludeNativeLibrariesInSingleFile=true /p:IncludeAllContentForSelfExtract=true /p:PublishTrimmed=true

PublishTrimmed参数会裁剪未使用的代码,可大幅降低最终exe体积,你当前180MB的依赖裁剪后通常可以降到50MB以内

方式2:提前配置csproj文件简化发布

在项目的.csproj文件的PropertyGroup节点中添加如下配置:

<PropertyGroup>
  <TargetFramework>net5.0</TargetFramework>
  <!-- 替换为你需要的目标运行时 -->
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>
  <PublishSingleFile>true</PublishSingleFile>
  <SelfContained>true</SelfContained>
  <IncludeNativeLibrariesInSingleFile>true</IncludeNativeLibrariesInSingleFile>
  <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
  <!-- 开启裁剪,不需要可以删掉 -->
  <PublishTrimmed>true</PublishTrimmed>
  <!-- 如果是WinForms/WPF项目可以加这个参数避免裁剪出错 -->
  <TrimMode>CopyUsed</TrimMode>
</PropertyGroup>

配置完成后,只需要执行dotnet publish -c Release即可完成单文件打包。

Costura.Fody补充配置

如果你坚持使用Costura.Fody打包,需要修改FodyWeavers.xml配置,让它匹配所有依赖程序集:

<Weavers>
  <Costura>
    <IncludeAssemblies>.*</IncludeAssemblies>
  </Costura>
</Weavers>

更推荐使用官方的单文件发布方案,兼容性、稳定性都优于第三方工具。

注意事项

  • 单文件发布必须指定运行时标识,不能使用无特定运行时的可移植构建
  • 如果你确定目标电脑已经安装了.NET 5运行时,可以把SelfContained设为false,最终文件体积会进一步缩小
  • 如果开启裁剪后程序运行报错,可以关闭PublishTrimmed,或者配置裁剪规则排除EPPlus相关的程序集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:39:03