.NET Core 3.1 WPF应用脱离runtimeconfig.dev.json无法运行问题咨询
问题根因
你遇到的问题核心是Costura.Fody与.NET Core 3.1+的原生发布逻辑冲突:
- runtimeconfig.dev.json是开发环境专属配置,仅用于在开发阶段从本地nuget缓存、dotnet store路径加载依赖,正式发布的程序完全不应该依赖该文件
- Costura.Fody是.NET Framework时代的依赖打包工具,无法正确处理.NET Core的依赖解析逻辑,导致发布时依赖项没有被正确嵌入/复制到发布目录,程序启动时找不到依赖就会 fallback 到dev配置里的本地路径查找,因此本地运行必须带dev.json,换了机器就算带dev.json,路径匹配不上也无法启动
- 你之前的发布命令缺少独立部署相关参数,也会导致依赖缺失问题
解决步骤
- 第一步:卸载Costura.Fody包,.NET Core 3.1已经内置单文件打包、依赖合并能力,不需要再用第三方工具处理,直接删除csproj里Costura.Fody对应的PackageReference节点即可
- 第二步:使用完整的发布命令执行发布,参考命令如下:
如果不需要生成单文件包,删除dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true-p:PublishSingleFile=true参数即可 - 第三步:发布前先删除项目根目录下的bin、obj文件夹,清理历史缓存避免影响发布结果
- 第四步:验证发布结果,发布产出目录中只会存在不带.dev后缀的
[程序名].runtimeconfig.json文件,删除runtimeconfig.dev.json后程序也可以正常启动,拷贝到其他未安装.NET Core 3.1运行时的Win x64设备也能正常运行
启动问题排查技巧
如果发布后依然无法启动,可在cmd终端中直接运行exe文件,程序不会直接闪退,会输出具体的错误日志,可根据日志定位剩余问题。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

