.NET 5 AspNet Core应用发布后runtimeconfig.json含includedFrameworks而非frameworks的原因及解决方法
嗨,这个问题其实和.NET的两种部署模式直接相关,我来给你拆解清楚~
为什么生成的是includedFrameworks而非frameworks
这俩字段的差异完全取决于你用的部署方式:
- 你现在执行的
dotnet publish -c release是默认的框架依赖部署(FDD)。这种模式下,你的应用会依赖目标机器上已经安装好的.NET运行时,所以runtimeconfig.json里用includedFrameworks来声明需要的框架版本,告诉系统要去加载机器上已有的对应框架。 - 而你期望的
frameworks字段,是**独立部署(SCD)**的专属标识。这种模式下,发布包会把完整的.NET运行时一起打包进去,不需要目标机器预先安装运行时,所以用frameworks来定义打包在包里的运行时信息。
如何生成包含frameworks字段的文件
要得到你想要的runtimeconfig.json,只需要切换到独立部署模式发布就行,有两种简单的方式:
方式1:在发布命令里加参数
直接在原有命令基础上,加上--self-contained true和目标运行环境的RID(Runtime Identifier),比如你要部署到Windows x64机器,就用:
dotnet publish -c release MyApplication.csproj --self-contained true -r win-x64
需要替换win-x64的话,常用RID还有linux-x64(Linux x64)、osx-x64(Mac x64)等,根据你的部署环境选就行。
方式2:修改项目文件默认配置
如果想让项目默认用独立部署,可以打开你的MyApplication.csproj,添加以下配置:
<PropertyGroup> <SelfContained>true</SelfContained> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <!-- 换成你的目标RID --> </PropertyGroup>
之后再执行原来的dotnet publish -c release MyApplication.csproj命令,生成的runtimeconfig.json就会包含frameworks字段啦。
⚠️ 提醒一下:独立部署的发布包体积会比框架依赖部署大不少,因为包含了完整的.NET运行时,你可以根据自己的部署场景来权衡选用哪种模式。
内容的提问来源于stack exchange,提问作者JakobFerdinand
相关产品推荐
相关产品推荐

