.NET 8 单文件发布:把 exe 和一堆 dll 打进一个文件里

用 .NET 8 发布应用的时候,如果直接默认发布,会出来一个 exe 外加一大串 dll。给到别人或者丢到服务器上,看着就乱,复制部署也容易漏文件。单文件发布就是把所有这些打包成一个 exe,干净很多。两种方式都能搞,一个是在 VS2022 里点一点,一个是直接用 dotnet publish 命令。

在 VS2022 里操作的话,右键项目选"属性",切到发布那个 tab。

新建一个发布配置文件,或者编辑已有的。部署模式选"独立"(Self-contained),这样会把 .NET 运行时自己也带进去,目标机器上不用装运行时。然后勾上"生成单个文件"。还有个 ReadyToRun 的选项,勾上启动会快一点,代价是生成的文件会更大,按需勾就行。保存后点发布,出来的就是一个单独的大 exe。

如果习惯直接改 csproj 文件,加这几行就可以:

复制代码
<PropertyGroup>
  <OutputType>Exe</OutputType>
  <TargetFramework>net8.0</TargetFramework>
  <PublishSingleFile>true</PublishSingleFile>
  <SelfContained>true</SelfContained>
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>

这几项一设,后面不管是用 VS 发布还是 dotnet publish,都会走单文件模式。

命令行发布更直接一点,在项目根目录下跑:

复制代码
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true

生成的单文件在 bin/Release/net8.0/win-x64/publish/ 下面。跑的时候直接双击那个 exe 就行。

踩过的一些坑说一下。

VS2022 里找不到"生成单个文件"这个选项的情况,有人遇到过。多半是项目类型或者目标框架不对,确认是控制台应用、目标框架是 net8.0。

如果界面上还是没有,直接在 csproj 里手写配置反而更稳,界面只是帮你改文件而已。

发布出来文件大得夸张。因为独立模式下把整个运行时都包进去了,trim 没开的话几百兆很正常。如果目标机器上确定装了 .NET 8 运行时,可以把 SelfContained 设成 false,走框架依赖模式,文件会小很多。但这时候你得保证环境里有正确的运行时,否则跑不起来。另一个思路是排查下引用的包,有些间接依赖可能根本没用上,能砍就砍。

调试信息的问题。单文件发布默认会把 pdb 剥离掉,导致出问题的时候不好定位。如果是在 debug 阶段,就不要开单文件发布了,或者手动把 pdb 拷过去用。

线上排查的话,可以考虑保留符号文件,或者用其他日志手段辅助。

另外,发布时指定的 RID(比如 win-x64)必须和目标机器匹配,否则拷过去双击没反应或者报错。Linux 下一般是 linux-x64,别弄混。

完整走一遍的话,创建一个控制台项目:

lcjmSSL不仅帮你申请证书,更帮你自动部署。证书签发后,系统可自动将证书部署到你的服务器或应用中,无需手动下载、上传、配置。同时开放API与回调接口,方便你将部署流程集成到自有运维体系中,实现真正的端到端自动化。

复制代码
dotnet new console -n SingleFileDemo
cd SingleFileDemo

改一下 csproj 加上前面的单文件配置,然后:

复制代码
dotnet publish -c Release

运行 ./bin/Release/net8.0/win-x64/publish/SingleFileDemo.exe 验证就行。

相关推荐
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
rockmelodies2 天前
# Windows Server2008 R2 Standard(SP1镜像U盘)重置本地管理员密码【完整详细步骤】
windows·密码破解
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
这个DBA有点耶2 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G2 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备2 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远2 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
-梅3 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog3 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发