基础打包代码:
# Windows 发布
dotnet publish -c Release -r win-x64 --self-contained true
# Linux 发布
dotnet publish -c Release -r linux-x64 --self-contained true
生成文件较多,生成完整的自包含包(含所有 .NET 运行时 DLL),最稳定、兼容性最高,但体积较大(通常 150--250MB)
优化版
dotnet publish -c Release -r linux-x64 --self-contained true /p:PublishSingleFile=true /p:PublishTrimmed=true
打包为单文件,并自动移除未使用的库,文件体积小(40--80MB),部署最方便,但要稍微注意反射依赖问题
/p:PublishTrimmed=true 会启用 .NET 的"修剪器(Trimmer)",它会分析代码,删除未使用的类与方法。
但:
-
如果你的程序使用 反射 (Reflection) 、动态加载 (Assembly.Load) 、JSON 序列化反射 等机制,修剪器可能会误删实际需要的类型;
-
一般业务型应用(例如:OPC UA、MQTT、Modbus 项目)通常不会受到严重影响;
-
但如果你发现发布后的程序运行时报
TypeLoadException、MissingMethodException等,可能是修剪导致的。
综上,建议使用基础打包代码,这样最大程序避免错误。
混淆代码:ConfuserEx
反编译:NativeAOT