不同版本的同一依赖程序集之间发现冲突是无法解析

问题描述 投票:329回答:19

当我清理,然后建立我的解决方案,有几个项目,输出窗口报道,构建成功。然而,当我查看错误列表窗口,它让我看到这样的警告:

不同版本的同一依赖程序集的,可能无法得到解决之间存在的冲突。这些参考冲突在构建日志中列出当日志级别设置为详细。 C:\ Program Files文件(x86)的\的MSBuild \ 12.0 \ BIN \ Microsoft.Common.CurrentVersion.targets

当我双击此消息时,它会打开C:\ Program Files文件(x86)的\的MSBuild \ 12.0 \ BIN \ Microsoft.Common.CurrentVersion.targets文件,但我不明白了什么东西。

我使用的Visual Studio Express的2013年网络。

如何才能知道什么是错的,并与DLL和我怎么然后进行警告消失?

.net visual-studio msbuild visual-studio-2013 visual-studio-express
19个回答
469
投票

而其他回应说这一点,他们不让它明确,所以我会....

在VS2013.2,实际上触发的引用信息的发射,就需要看不懂的消息,该消息说:

C:\ Program Files文件(x86)的\的MSBuild \ 12.0 \ BIN \ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3277:不同版本的同一依赖程序集的,可能无法得到解决之间存在的冲突。这些参考冲突在构建日志中列出当日志级别设置为详细。

这是不正确的(或至少是为Visual Studio的某些版本 - 这似乎是上最新的VS2015更新3或更高版本OK)。相反,它变成诊断(从工具 - >选项 - >项目和解决方案 - >生成和运行,设置MSBuild项目生成输出的详细程度),于是你会看到消息,例如:

有 “Newtonsoft.Json,版本= 6.0.0.0,文化=中性公钥= 30ad4fe6b2a6aeed” 和 “Newtonsoft.Json,版本= 6.0.5.17707,文化=中性公钥= 30ad4fe6b2a6aeed” 之间的冲突。

  • “Newtonsoft.Json,版本= 6.0.0.0,文化=中性公钥= 30ad4fe6b2a6aeed” 被选择,因为它是伯和 “Newtonsoft.Json,版本= 6.0.5.17707文化=中性公钥= 30ad4fe6b2a6aeed” 不是。

然后

  • Ctrl-Alt-O去生成输出窗口
  • 搜索“选择”查找下钻。

......是的,对于那些希望在[诊断]消息的细节,这是新闻这一无知是there's a convention in town whereby all 6.x versions are, internally Assembly Version 6.0.0.0, i.e. only the SemVer Major component goes into the Assembly Version :)


3
投票

显然,有很多不同的原因,因此很多关于这个问题的解决方案。要扔雷混进去,我们升级了以前直接在我们的Web项目中引用通过的NuGet管理的版本的组件(System.Net.Http)。该删除的项目中直接引用,但我们的测试项目中仍然包含了直接引用。升级两个项目使用的NuGet管理组件解决了这个问题。


2
投票

如果您对包的任何变化 - 重新打开SLN。这为我工作!


1
投票

我发现,有时候,套餐的NuGet将安装(我猜是).NET核心所需的组件或其它项目与已经安装的框架冲突。我的解决办法有打开项目(的.csproj)文件,并删除这些引用。例如,System.IO,的System.Threading并且这样的,倾向于当通过一些最近安装NuGet包被包括Microsoft.Bcl添加。没有理由对那些在我的项目的特定版本,所以我删除了引用,并生成项目。希望帮助。

您可以搜索项目文件“参考”,并删除了冲突。如果他们包括在系统,摆脱他们,并构建应该工作。这可能不是回答这个问题的所有情况 - 我要确保你知道我工作:)

什么我注释掉例如:

<!-- <Reference Include="System.Runtime, Version=2.6.9.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> -->
  <!-- <HintPath>$(SolutionDir)packages\Microsoft.Bcl.1.1.9\lib\net40\System.Runtime.dll</HintPath> -->
  <!-- <Private>True</Private> -->
<!-- </Reference> -->

0
投票

我已经卸载微软ASP.NET MVC nuget.org从管理的NuGet Packagaes并重新安装它。虽然重新安装它解决了所有与剃刀版本冲突。试试吧 。


0
投票

我改变了冗长的MSBuild到Diagnostic.but问题出在哪里是那么根据上面的答案我的app.config有此代码不能找到:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="XbimXplorer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>

所以,我只是改变了第一个系统,从版本4.0.0.0到12.0.0.0和我的项目工作。


0
投票

按其他的答案,设置输出日志级别详细和冲突,这将告诉你在哪里旁边看搜就有。

在我的情况下,给我发过在寻找引用源几个方向,但最终事实证明,问题是我的便携式类库项目,它被指定了错误的版本之一,并拉动其自身版本在参考文献中,因此冲突。快速重新定位目标,问题就解决了。


0
投票

我只是碰到了这一点,这个问题从的NuGet切换包本地引用dll文件后。这个问题是旧的运行时app.config结合的东西。


0
投票

我迁移到包装说明后出现此警告。在诊断输出有该库是由同一个库本身的参考信息。这可能是新包装参考的一个bug。该解决方案是使AutoGenerateBindingRedirects和删除自定义绑定重定向。


0
投票

我跟着几个的答复这里要弄清楚什么是错的建议,但没有一个答案似乎解释了如何解决它。我的问题是,一个参考需要不同版本的第二参考。所以Newtonsoft是在第6版,但一些其他的DLL想要4.5。然后我升级Newtonsoft的建议其他的答案中的一个,这让事情变得更糟。

所以,我其实降级我Newtonsoft安装并警告就走了(VS 2017):

右键单击引用在解决方案资源管理器,然后选择管理的NuGet包......在“安装”选项卡,找到Newtonsoft(或任何你的冲突)在右侧,一个下拉列表旁会出现“版本”,您可以更改年长版本。这不是明显,我认为这个下拉菜单可以用来降级。


0
投票

2017年VS,MVC项目

我不知道为什么,但对我来说,这个问题的解决方案是从从控制器的操作方法称为模型方法签名删除out参数。这是非常奇怪的行为,但是这是解决我的问题。


69
投票

运行msbuild Foo.sln /t:Rebuild /v:diag(从C:\Program Files (x86)\MSBuild\12.0\bin)构建命令行您的解决方案,并获得更多的详细信息,然后发现,记录警告的.csproj.并检查其引用和使用,在不同的版本相同的公共组件等项目的引用。

编辑:您也可以直接在VS2013设置生成详细程度。转到Tools> Options菜单,然后去Projects and Solutions和冗长的MSBuild设置为Diagnostic

编辑:很少澄清,因为我刚刚得到一个自己。在我的情况的警告是因为我加入ReSharper的使用提示,而不是添加引用对话框,做到了versionless即使两个V4和V12是可供选择的参考。

<Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
<Reference Include="Microsoft.Build.Framework" />

VS

<Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
<Reference Include="Microsoft.Build.Framework, Version=12.0.0.0, ..." />

在日志的MSBuild与/v:diag冗长它看起来像下面这样。让这两个参考发生冲突的细节: -

  There was a conflict between 
  "Microsoft.Build.Framework, Version=4.0.0.0, ..." and 
  "Microsoft.Build.Framework, Version=12.0.0.0, ...". (TaskId:16)

      "Microsoft.Build.Framework, Version=4.0.0.0, ..." was chosen because it was primary and 
      "Microsoft.Build.Framework, Version=12.0.0.0, ..." was not. (TaskId:16)

      References which depend on "Microsoft.Build.Framework, Version=4.0.0.0, ..." 
      [C:\...\v4.5.1\Microsoft.Build.Framework.dll]. (TaskId:16)

          C:\...\v4.5.1\Microsoft.Build.Framework.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v4.5.1\Microsoft.Build.Framework.dll". (TaskId:16)
              Microsoft.Build.Framework (TaskId:16)

      References which depend on "Microsoft.Build.Framework, Version=12.0.0.0, ..." 
      [C:\...\v12.0\Microsoft.Build.Framework.dll]. (TaskId:16)

          C:\...\v12.0\Microsoft.Build.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.dll". (TaskId:16)
              Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)

          C:\...\v12.0\Microsoft.Build.Engine.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.Engine.dll". (TaskId:16)
              Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)

C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5): warning MSB3277: 
Found conflicts between different versions of the same dependent assembly that could not be resolved.  
These reference conflicts are listed in the build log when log verbosity is set to detailed. 
[C:\Users\Ilya.Kozhevnikov\Dropbox\BuildTree\BuildTree\BuildTree.csproj]

-1
投票

通过包管理器控制台运行Update-Package命令

这将解决MSB3277,它做什么它重新安装所有的包,他们来与可能的最高版本,所有相关组件。也可以只更新特定的包。或更新后下调,如果想要,我几次这样的问题,问题就出现了。取决于你有多少的NuGet包有,这个过程可能需要几分钟的时间。

在官方的文档更多信息https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages


36
投票

我只能支持进一步的鲁本的答案,并显示两条消息之间的比较:

并且消息:

C:\ Program Files文件(x86)的\的MSBuild \ 12.0 \ BIN \ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3277:不同版本的同一依赖程序集的,可能无法得到解决之间存在的冲突。这些参考冲突在构建日志中列出当日志级别设置为详细。

因此,鲁本的权利 - 这是不是真的。没有任何冲突,只是缺少组件。这是特别无聊的时候该项目是ASP.NET应用程序,因为意见都编上的需求,也就是只显示首次之前。这是当有必要有组装功能。 (有与其余代码一起预编译的观点的一个选项,但是这是another story。)另外,如果设置了诊断你得到下面的输出详细程度:

C:\ Program Files文件(x86)的\的MSBuild \ 12.0 \ BIN \ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3245:无法解析此引用。无法找到程序集 “System.Web.Razor,版本= 3.0.0.0,文化=中性公钥= 31bf3856ad364e35,ProcessorArchitecture用于= MSIL”。检查以确保存在磁盘上的装配。如果您的代码需要此引用,则可能出现编译错误。

其结果是,所有你需要做的是两种:

  1. 手动添加到组件的引用(定位在磁盘上,也许GAC,并将其添加为“直接”参考),或
  2. 使用NuGet包(如发表在画廊)下载它,并引用其中包含的组件。

更多的NuGet画廊here。更多关于预编译ASP.NET视图here


19
投票

更改在Visual Studio中构建冗长将有助于在正确的方向指向。按照下面的步骤来更改冗长的VS

  1. 进入工具 - >选项菜单中的VS
  2. 打开的项目和解决方案 - >生成和运行
  3. 更改MSBuild项目生成输出的详细程度的值。选择一个从QuietMinimalNormalDetailedDiagnostic

检查输出窗口(按Ctrl + Alt + O)在VS看到生成日志的变化。


16
投票

和我怎么然后进行警告消失?

你可能将不得不以reinstall或升级您的NuGet包来解决这个问题。


16
投票

重申从@elshev右键单击该解决方案的评论之一 - >管理的解决方案的NuGet包 - >下的整合,你可以看看是否有安装不同版本的同一个包的。更新包在那里。冲突错误得到解决。


7
投票

我使用Visual Studio 2017年和遇到的这个时候我更新一些的NuGet包。什么工作对我来说是打开我的web.config文件,然后找到<runtime><assemblyBinding>节点并将其删除。保存web.config和重建项目。

看看Error List窗口。你会看到什么样子关于绑定冲突的大规模长警告。双击它,它会自动重新用正确的映射关系<runtime><assemblyBinding>块。


6
投票

作为dotnet CLI issue 6583问题陈述应dotnet nuget locals --clear all命令来解决。


3
投票

我可以用的NuGet包的Web项目解决这个安装Newtonsoft的Json

© www.soinside.com 2019 - 2024. All rights reserved.