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

相关推荐
猫咪很可爱13 小时前
Oracle TEMP 表空间不足(ORA-01652)问题分析与优化实践
数据库·oracle
木子欢儿13 小时前
openconnect Linux客户端安装 以及开机自启和登录
linux·运维·服务器
..Dauntless..13 小时前
【Linux】文件系统(一)
linux·运维·服务器
九零HTTP14 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
SHENGWEI胜为14 小时前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
极光通讯14 小时前
液冷服务器对内存和SSD的适配要求:高密度部署下的散热与信号完整性
运维·服务器
Data-Miner14 小时前
需要做财务数据分析,有什么好用的工具?从准备到出报告的实操指南
大数据·数据库·数据分析
袋鼠云数栈15 小时前
让 SQL 解析不再重复造轮子:SqlParserX 正式开源
数据库·人工智能·sql·开源·数据治理
这个DBA有点耶15 小时前
期货 CTP 系统 Oracle RAC 迁移国产库实战:读写分离架构设计与性能对标
数据库·架构·dba
数据库安全15 小时前
AI数据访问安全 |如何控制AI访问权限,防止越权
数据库·安全