NuGet版本冲突求助:升级Microsoft.AspNetCore.Mvc遇依赖矛盾
首先咱们得把核心矛盾理清楚:你的项目里Microsoft.VisualStudio.Web.CodeGeneration.Design还停留在1.1.0版本(对应ASP.NET Core 1.1生态),但你要升级的Microsoft.AspNetCore.Mvc 2.0.4属于ASP.NET Core 2.0体系,这俩版本的依赖链本来就不匹配,才引发了Microsoft.CodeAnalysis.CSharp的版本冲突。
最优解决方案:同步升级代码生成工具包
最稳妥的做法是把代码生成工具包也升级到和Mvc匹配的2.0.x版本,这样它的依赖会自动适配2.0版本的CodeAnalysis组件,冲突自然就消除了:
- 右键你的Web项目 → 选择「管理NuGet程序包」
- 切换到「已安装」标签,找到
Microsoft.VisualStudio.Web.CodeGeneration.Design - 在版本下拉框里选2.0.4(或者其他2.0.x稳定版本),点击「更新」
- 等更新完成后再重新升级
Microsoft.AspNetCore.Mvc到2.0.4,大概率就不会再出现冲突了
如果暂时不想升级代码生成工具:直接指定CodeAnalysis版本
要是因为某些原因没法升级代码生成工具,那提示里的「直接从项目引用该包」,意思就是在你的项目里手动添加Microsoft.CodeAnalysis.CSharp的引用,并指定一个能兼容两边要求的版本——这里得选≥2.3.1的版本,同时高版本一般向下兼容1.3.0的Microsoft.CodeAnalysis.CSharp.Workspaces,所以选2.3.1或者更高的2.x版本都可行。
操作分两种方式:
方式1:通过Visual Studio界面操作
- 右键Web项目 → 管理NuGet程序包
- 切换到「浏览」标签,搜索
Microsoft.CodeAnalysis.CSharp - 选中版本2.3.1(或更高的2.x版本,比如2.9.0),点击「安装」
- 安装完成后再尝试升级
Microsoft.AspNetCore.Mvc到2.0.4,NuGet会优先使用你直接指定的版本,跳过冲突检查
方式2:手动编辑项目文件(.csproj)
- 右键Web项目 → 编辑项目文件(或者直接在文件管理器里打开.csproj文件)
- 在
<ItemGroup>节点下添加这段代码:<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="2.3.1" /> - 保存文件后回到Visual Studio,它会自动还原NuGet包
- 之后再升级
Microsoft.AspNetCore.Mvc即可
验证解决效果
操作完成后,你可以打开「包管理器控制台」,运行Get-Package命令,查看Microsoft.CodeAnalysis.CSharp的版本是否是你指定的那个,同时确认Microsoft.AspNetCore.Mvc和Microsoft.VisualStudio.Web.CodeGeneration.Design都能正常加载。
内容的提问来源于stack exchange,提问作者Force444

