升级到.NET Core 3.1后如何更新其他Microsoft依赖库?
.NET Core 2.x 升级至3.1的NuGet包适配方案
从.NET Core 3.0开始,微软对ASP.NET Core的分发方式做了重大调整,绝大多数之前单独发布的内置组件包不再以独立NuGet包形式推送版本,而是统一整合进框架元包中,找不到适配3.1版本的核心原因是包引用方式发生了变化,并非没有对应适配版本。
可直接移除的冗余包引用
以下列出的包全部属于ASP.NET Core核心内置组件,.NET Core 3.1版本后不需要单独引用,直接从项目文件的PackageReference列表中删除即可:
Microsoft.AspNetCore.Server.KestrelMicrosoft.AspNetCore.SpaServicesMicrosoft.AspNetCore.Server.IISIntegrationMicrosoft.AspNetCore.StaticFilesMicrosoft.Extensions.Configuration.FileExtensionsMicrosoft.Extensions.Configuration.JsonMicrosoft.AspNetCore.MvcSystem.Net.Http(该组件从.NET Core 2.1起已纳入基础框架,无需单独引用)
删除上述包后,需要在项目文件中添加ASP.NET Core框架引用,注意此处用FrameworkReference而非普通的NuGet包引用,不需要手动指定版本号,会自动匹配当前安装的.NET Core 3.1 SDK对应的内置组件版本:
<ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup>
需要保留并升级版本的独立包
剩下几个未整合进框架元包的组件,直接将版本号修改为以下适配.NET Core 3.1的稳定版即可:
Microsoft.VisualStudio.Web.CodeGeneration.Design:升级至3.1.5,注意添加PrivateAssets="All"属性避免该工具包被传递引用到上游项目System.ServiceModel.Duplex:升级至4.8.1System.ServiceModel.Security:升级至4.8.1
最终参考配置
修改完成后,项目文件的核心配置参考如下:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup> <ItemGroup> <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.5" PrivateAssets="All" /> <PackageReference Include="System.ServiceModel.Duplex" Version="4.8.1" /> <PackageReference Include="System.ServiceModel.Security" Version="4.8.1" /> </ItemGroup> </Project>
操作提示:修改完项目文件后,先清理解决方案,手动删除项目目录下的
bin、obj缓存文件夹,再执行NuGet还原和重新编译,避免旧版本包缓存导致的编译异常。后续升级到.NET 7时,仅需要将TargetFramework值改为net7.0,再把上述三个独立包升级到对应适配.NET 7的版本即可,框架引用部分不需要做调整。
内容的提问来源于stack exchange,提问作者SkyeBoniwell
相关产品推荐
相关产品推荐

