.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 验证就行。

相关推荐
长江&后浪7 小时前
华为wlan实验-三层旁挂
运维·服务器·网络·华为
xiaoxiangsiyan7 小时前
机房交换机交换技术与服务器链路聚合深度指南
运维·服务器·网络·学习·自动化·bond
做萤石二次开发的哈哈8 小时前
萤石蓝海AIoT一站式工作台计费说明
网络·数据库·萤石开放平台·蓝海aiot一站式工作台
竹枝溪8 小时前
MySQL数据库零基础入门
数据库·sql·mysql·navicat·ddl·dml·dql
万山寒8 小时前
python依赖包导出离线安装到没有外网的服务器
服务器·开发语言·python
龙仔7258 小时前
人大金仓Kingbase V8 自动全量备份部署完整笔记
数据库·笔记·备份·人大金仓
王志来137944730088 小时前
从选型到交付,工控服务器机箱一站式采购平台匀天如何实现服务闭环?
数据库
dongfangkandian8 小时前
从浪涌失控到端口级调度:2026年AI服务器老化测试专用PDU的选型逻辑
服务器
土星云SaturnCloud8 小时前
边缘计算赋能电子焊接工位双摄AI管控:土星云SE110S-WC8实现合规检测与质量追溯全闭环
服务器·人工智能·ai·边缘计算
怦怦蓝8 小时前
Windows 安装 Docker Desktop 踩坑完整实战指南(WSL2 故障排错实录)
windows·docker·容器