构建期间mscorlib版本冲突

时间:2015-06-17 03:06:23

标签: visual-studio-2013

在新的Win8.1重新安装上,我的所有代码都从备份恢复,当我构建我的解决方案的主项目时,我突然发现了Visual Studio警告:

  

发现无法解析的同一依赖程序集的不同版本之间发生冲突。当日志详细程度设置为详细信息时,这些引用冲突将在构建日志中列出。

我将输出日志级别设置为Detailed,我发现了一些这样的条目:

  

" mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089"之间存在冲突。和" mscorlib,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e,Retargetable = Yes"。 " mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089"被选中是因为它的版本更高。

麻烦的是,我没有在解决方案旧的新的任何地方引用mscorlib。我的机器上有几个需要.NET 3.5的应用程序,但是我无法看到它是如何相关的。

一个区别是:没有发生此警告的旧Win8.1安装是一台独立的机器;这次我加入了域名。我不知道这是否有所作为(我无法看到),但我认为至少应该提到它。

8 个答案:

答案 0 :(得分:27)

在不同项目上使用不同版本的Nuget包也可能导致此问题。确保所有包都具有相同的版本:

  1. (在Visual Studio中)右键单击解决方案
  2. 点击管理解决方案的Nuget包
  3. 点击合并标签
  4. 对于“合并”选项卡中的每个包,请将包更新为每个项目的相同版本。

答案 1 :(得分:21)

我能够通过在软件包管理器控制台发出update-package -reinstall命令来解决这个问题。

但是

请注意,更新解决方案中的所有软件包可能会导致其他问题,请确保在出现问题时可以回滚到好的版本!

答案 2 :(得分:10)

我已经能够通过删除我的解决方案的“.suo”文件来解决此问题,然后重新打开解决方案。然后我重建了解决方案,问题就消失了。

“.suo”文件位于“.vs”文件夹中,这是我通常删除的内容。

祝你好运!

答案 3 :(得分:4)

我的解决方案比上述所有方法都简单一些。我只是添加了对引发此错误的两个程序集的引用(System.Runtime.Serialization和mscorlib),并重建了项目。通过这样做,我指定了4.0.0.0版本并消除了歧义。

由于“无法添加对'mscorlib'的引用。此组件已由构建系统自动引用”,因此无法通过GUI添加两个(mscorlib)中的一个。错误。

我需要打开.vbproj(.csproj)文件,并通过以下方式手动添加引用:

<Reference Include="mscorlib" />

答案 4 :(得分:3)

我通过按照this answer将详细程度设置为诊断来解决了这个问题。

一旦这样做并重建了解决方案,构建日志实际上就会列出依赖于两个不同版本的mscorlib的特定软件包。

在我的特定情况下,我的项目引用了System.Net.Http版本2.0.20126.16343。我打开了NuGet软件包管理器,并将此软件包更新为最新版本(当时为4.3.4)。下次构建解决方案时,警告消失了。

答案 5 :(得分:2)

我已经尝试了以下所有方法,但没有人解决了这个问题。

  1. 命令&#34; update-package -reinstall&#34;。
  2. 通过“合并”标签进行更新和打包。
  3. 删除&#34; .suo&#34;文件。
  4. 但是,我的问题是另一种情况,我猜新版本的Xamarin.Forms包使用了不同版本的mscorlib。所以我已经降级了它并且工作正常。

    我建议您尝试以上所有解决方案,并尝试查找哪个包存在冲突。

答案 6 :(得分:1)

按照Memet Olsen的建议使用VS2017社区......几乎相同:

  • 右键单击解决方案资源管理器中的解决方案。
  • 选择“管理解决方案的Nuget包”
  • 检查包裹。如果其中任何一个有蓝色向上箭头而不是绿色勾号,请使用“更新”按钮

答案 7 :(得分:0)

我也尝试了所有建议的解决方案,但无济于事。

在我的项目中,此警告消息是由dll引用引起的,该dll引用与我的项目所针对的.net框架有所不同。

为了找出引起该警告的dll引用,我只是使用.net反射器来探索每个dll引用,以找出哪个引用了不同的.net框架(mscorlib)。

为了解决此问题,必须将参考dll更新为与使用该项目的项目使用相同.net框架的版本。

希望这会有所帮助。