先确认代码究竟在哪里
扩展名为 EXE,不代表它包含 .NET 托管代码。现代 SDK 项目经常同时生成本机 apphost 和保存 IL 的 DLL,启动器负责加载后者。只处理启动器,不能保护 DLL 中的业务逻辑。single-file 包、Native AOT 输出和普通托管程序集是不同格式;本流程先从普通文件夹发布开始。
准备一份可回退的输入
下方命令生成不带 apphost 的框架依赖发布结果,可用 dotnet 启动托管 DLL。保留完整目录,包括 .deps.json 和 .runtimeconfig.json,不要随意上传所有依赖。免费版接受单个不超过 1 MB 的文件,Pro 的当前额度见套餐页。已经强名称签名或延迟签名的输入,需要先准备未签名构建;私钥始终保留在本地。
测试真正交付的版本
下载结果后,在发布目录的副本中用预期文件名替换目标程序集,原始版本不要覆盖。检查启动、参数、退出码、配置、资源以及主要业务流程。如果交付要求签名,应在可信本地环境重新签名,再测试签名后的完整包。成功下载不等于通过兼容性测试,混淆也不能让客户端内置的 API 密钥成为真正的秘密。
dotnet publish MyApp.csproj -c Release -p:UseAppHost=false -o publish-check
dotnet publish-check/MyApp.dll