使用Source Generator时遇到Microsoft.CodeAnalysis.Common的NuGet版本冲突问题
解决.NET 6 MVC与类库的Microsoft.CodeAnalysis版本冲突问题
核心原因
你的MVC项目依赖的Microsoft.VisualStudio.Web.CodeGeneration.Design(脚手架工具)锁死了Microsoft.CodeAnalysis.Common的4.0.0版本,而类库引用的Microsoft.CodeAnalysis.CSharp.Workspaces要求4.3.0版本,两者的依赖链冲突导致包还原失败。
可行解决方案
方案1:降级类库的CodeAnalysis包版本到4.0.0
Source Generator在4.0.0版本的CodeAnalysis包中完全可用,且能和脚手架工具的依赖兼容:
- 打开类库的项目文件(
.csproj),修改以下包的版本:
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="4.0.0" PrivateAssets="all" /> <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.0.0" />
- 保存后执行
dotnet restore,再重建项目。
方案2:隔离脚手架工具的依赖(保留4.3.0版本)
如果必须使用4.3.0版本的CodeAnalysis包,可以将脚手架工具的依赖设为私有资产,避免其影响主项目的包版本:
- 打开MVC项目的
.csproj文件,修改脚手架工具的引用:
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.7" PrivateAssets="all" />
- 在MVC项目中直接添加4.3.0版本的
Microsoft.CodeAnalysis.Common引用:
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.3.0" />
- 执行以下命令清理缓存并还原:
dotnet nuget locals all --clear dotnet restore
方案3:临时移除脚手架工具(若不需要代码生成)
如果近期不需要使用脚手架生成代码,可以暂时移除MVC项目中的Microsoft.VisualStudio.Web.CodeGeneration.Design包,直接安装4.3.0版本的CodeAnalysis相关包,待需要脚手架时再重新安装。
内容的提问来源于stack exchange,提问作者NibblyPig
相关产品推荐
相关产品推荐

