本文介绍MSB3277错误代码。
消息文本
MSB3277: Found conflicts between different versions of 'value' that could not be resolved.
DESCRIPTION
当在同一项目的生成中引用同一依赖程序集的多个版本时,生成期间会出现此错误。 在 .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 会替代它。 有关详细信息,请参阅 全局程序集缓存。
外部组件
如果冲突位于非Microsoft组件中,则项目中正在使用的冲突程序集版本可能不支持该组件。 检查其他组件的提供程序,以查看它们是否提供更新的兼容版本。 如果修补程序不可用,解决方案可能是降级引用的冲突程序集的版本,以匹配其他组件使用的版本。
绑定重定向
在某些情况下,你的项目可能会指定或可能需要指定绑定重定向,这会强制调用使用指定版本的程序集。 有关详细信息,请参阅 重定向程序集版本 ,了解绑定重定向的工作原理。
Visual Studio 或项目文件中的设置可以启用或禁用自动绑定重定向。 有关详细信息,请参阅 “启用和禁用自动绑定重定向”。 检查设置,并确保了解项目使用绑定重定向的方式和原因。
多个版本的程序集已加载
在高级方案中,项目可能需要同一程序集的多个版本。 可以使用特殊技术替代普通程序集加载过程来实现目标。 有关详细信息,请参阅 解析程序集加载。 请务必了解并按照适用于程序集加载的最佳做法中的指导进行操作。
有关解决程序集引用错误的指南,请参阅 程序集引用疑难解答 以及 运行时如何定位程序集。
适用于
MSBuild 的所有版本