执行dotnet build时出现Microsoft.Build.Tasks.CodeAnalysis.dll程序集冲突
你遇到的这个错误本质是旧版Microsoft.Net.Compilers包与当前.NET Core环境的兼容性冲突,导致构建任务加载失败。先贴出你遇到的错误信息:
C:\Users.nuget\packages\microsoft.net.compilers\2.6.1\tools\Microsoft.CSharp.Core.targets(84,5): error MSB4062: The "Microsoft.CodeAnalysis.BuildTasks.Csc" task could not be loaded from the assembly C:\Users.nuget\packages\microsoft.net.compilers\2.6.1\bu...
下面是几个经过验证的解决步骤,按顺序尝试即可:
移除或升级
Microsoft.Net.Compilers包
从.NET Core 3.0开始,SDK已经内置了Roslyn编译器,不再需要单独引用Microsoft.Net.Compilers这个NuGet包。旧版本(比如你用的2.6.1)和新SDK兼容性极差,直接移除是最省心的方案:
打开项目的.csproj文件,找到类似<PackageReference Include="Microsoft.Net.Compilers" Version="2.6.1" />的行,删除它即可。如果确实需要保留这个包,建议升级到3.8.0及以上的稳定版本。清理缓存并重新构建
缓存的损坏包文件也可能导致加载失败,执行以下命令彻底清理:dotnet clean dotnet nuget locals all --clear之后重新恢复依赖并构建:
dotnet restore dotnet build检查MSBuild与.NET SDK版本兼容性
运行dotnet msbuild --version查看当前MSBuild版本,确保它和你的项目目标框架版本匹配。如果版本过低,直接升级到项目要求的.NET Core SDK版本即可。另外也要排查系统中是否有自定义的MSBUILD环境变量指向了旧版本路径,导致加载了错误的程序集。排查依赖版本冲突
项目中其他引用的包可能间接引入了不同版本的Microsoft.CodeAnalysis相关程序集,引发冲突。可以用以下命令查看完整依赖树:dotnet list package --include-transitive找到冲突的包后,要么通过在
<PackageReference>中添加PrivateAssets="all"隔离依赖,要么在.csproj中添加程序集绑定重定向来统一版本:<ItemGroup> <RuntimeHostConfigurationOption Include="Microsoft.NETCore.DotNetHostPolicy.SetupLibrariesResolver" Value="true" /> <AssemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <DependentAssembly> <AssemblyIdentity Name="Microsoft.CodeAnalysis" PublicKeyToken="31bf3856ad364e35" Culture="neutral" /> <BindingRedirect OldVersion="0.0.0.0-4.6.0.0" NewVersion="4.6.0.0" /> </DependentAssembly> </AssemblyBinding> </ItemGroup>
内容的提问来源于stack exchange,提问作者The Pax Bisonica




