当在同一项目的生成中引用了同一依赖程序集的多个版本时,会在生成期间出现此错误。 在 .NET 生成中,通过其他引用的程序集直接或间接引用的所有程序集都必须解析为同一版本。 生成相同的二进制文件时,不能引用同一程序集的两个不同版本和冲突版本。 此错误由
ResolveAssemblyReference 任务
发出,该任务查看所有引用的程序集以及由这些程序集间接引用的所有程序集,以此类推,直到所有程序集引用均已解决。
若要诊断错误,首先启用诊断日志(使用
-verbosity:diag
命令行开关),然后使用完整的诊断输出检查 MSBuild 日志文件。 对于大型项目的较大输出日志,请考虑使用二进制日志(
-bl
命令行开关)和
MSBuild 结构化日志查看器
来更轻松地查看输出。 如果 MSBuild 16.x 或更高版本出现此错误,则会将发生冲突的特定版本写入日志文件。 如果使用的是早期版本的 MSBuild,则该版本不在日志文件中,但通常可以遵循依赖链来查找冲突引用。 查看项目引用的每个程序集以及这些程序集引用的程序集,以此类推,直到找到冲突版本。
诊断日志不仅应指定哪个程序集版本发生冲突,还应指定它们被考虑的原因,即存在对 assembly1.dll 的引用,它引用了 assembly2.dll 版本 x,但还存在对 assembly2.dll 版本 y 的引用,并且 MSBuild 无法确定哪个是要使用的正确版本。 下面是诊断日志的摘录,其中显示了两个版本的 StreamJsonRpc 之间的冲突:
There was a conflict between "StreamJsonRpc, Version=2.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "StreamJsonRpc, Version=2.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
"StreamJsonRpc, Version = 2.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was chosen because it was primary and "StreamJsonRpc, Version=2.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was not.
References which depend on "StreamJsonRpc, Version = 2.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll].
C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll
Project file item includes which caused reference "C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll".
C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll
C:\Users\user\.nuget\packages\microsoft.servicehub.framework\2.0.72\lib\netstandard2.0\Microsoft.ServiceHub.Framework.dll
Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.servicehub.framework\2.0.72\lib\netstandard2.0\Microsoft.ServiceHub.Framework.dll".
C:\Users\user\.nuget\packages\microsoft.servicehub.framework\2.0.72\lib\netstandard2.0\Microsoft.ServiceHub.Framework.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.15.0\16.4.29318.21\lib\net472\Microsoft.VisualStudio.Shell.15.0.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.datadesign.common\16.0.28321-alpha\lib\net472\Microsoft.VisualStudio.DataDesign.Common.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.projectsystem\16.2.133-pre\lib\net472\Microsoft.VisualStudio.ProjectSystem.VS.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.design\16.0.28316-pre\lib\net45\Microsoft.VisualStudio.Shell.Design.dll
C:\Users\user\.nuget\packages\microsoft.vsdesigner\16.0.28321-alpha\lib\net472\Microsoft.VSDesigner.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.language\16.0.428\lib\net472\Microsoft.VisualStudio.Language.dll
Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.visualstudio.language\16.0.428\lib\net472\Microsoft.VisualStudio.Language.dll".
C:\Users\user\.nuget\packages\microsoft.visualstudio.language\16.0.428\lib\net472\Microsoft.VisualStudio.Language.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.editor\16.0.428\lib\net472\Microsoft.VisualStudio.Editor.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll".
C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.utilities\16.4.29317.144\lib\net46\Microsoft.VisualStudio.Utilities.dll
Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.visualstudio.utilities\16.4.29317.144\lib\net46\Microsoft.VisualStudio.Utilities.dll".
C:\Users\user\.nuget\packages\microsoft.visualstudio.utilities\16.4.29317.144\lib\net46\Microsoft.VisualStudio.Utilities.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.imaging\16.4.29317.144\lib\net472\Microsoft.VisualStudio.Imaging.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.15.0\16.4.29318.21\lib\net472\Microsoft.VisualStudio.Shell.15.0.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.datadesign.common\16.0.28321-alpha\lib\net472\Microsoft.VisualStudio.DataDesign.Common.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.projectsystem\16.2.133-pre\lib\net472\Microsoft.VisualStudio.ProjectSystem.VS.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.design\16.0.28316-pre\lib\net45\Microsoft.VisualStudio.Shell.Design.dll
C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.framework\16.4.29318.21\lib\net472\Microsoft.VisualStudio.Shell.Framework.dll
C:\Users\user\.nuget\packages\microsoft.vsdesigner\16.0.28321-alpha\lib\net472\Microsoft.VSDesigner.dll
References which depend on "StreamJsonRpc, Version = 2.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [].
还可以将 MSBuildDebugEngine
环境变量设置为 1,以获取所有可能的日志。 请参阅生成用于 .NET Framework 的 MSBuild - 日志。
根据冲突的根本原因,修复可能用于更新磁盘上的程序集版本,方法可能是通过升级或重新安装 NuGet 包或 SDK。 如果只想将所有包更新到最新版本,则可以在 Visual Studio 中通过包管理器控制台运行命令 Update-Package -reinstall
。 请参阅重新安装和更新包。 但是,可以在磁盘上有意具备引用程序集的多个版本,但你的项目或其中一个依赖项需要进行更新,以便引用已安装的冲突程序集的最新版本。 全局程序集缓存 (GAC) 可能也是潜在冲突的来源,但在引用特定版本的程序集时,GAC 会对其进行重写。 请参阅全局程序集缓存。
第三方组件
如果在第三方组件中发生冲突,则你在项目中使用的冲突程序集的版本可能不支持此组件。 查看第三方以确定是否提供了更新的兼容版本。 如果未提供,解决方案可能是降级所引用的冲突程序集的版本以与第三方组件使用的版本匹配。
绑定重定向
在某些情况下,你的项目可能会指定或可能需要指定绑定重定向,这会强制调用使用指定版本的程序集。 请参阅重定向程序集版本,以了解绑定重定向的工作原理。 Visual Studio 或项目文件中的设置可以启用或禁用自动绑定重定向。 请参阅如何:启用和禁用自动绑定重定向。 检查设置并确保你了解项目使用绑定重定向的方式和原因。
加载同一程序集的多个版本
在高级方案中,还可以使用有意需要同一程序集的多个版本的项目。 可以使用特殊方法来重写常规程序集加载过程以实现目标。 请参阅解析程序集加载。 请务必了解并按照适用于程序集加载的最佳做法中的指导进行操作。
运行时如何定位程序集