Visual Studio要求我引用一个不存在的程序集

时间:2015-01-16 01:48:14

标签: visual-studio-2013 msbuild .net-assembly mscorlib

我以某种方式将我的项目带到了一个状态,在这个状态下,Visual Studio 2013无法编译它,并带有一个荒谬的错误:

  

类型' System.Collections.Generic.Dictionary`2'在未引用的程序集中定义。您必须添加对程序集的引用,System.Collections,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'。

首先,没有这样的程序集,它不存在。 其次,Dictionary<TKey, TValue>mscorlib.dll中定义,当然,默认情况下会引用GroupBy。 Resharper(有自己的代码分析引擎)报告解决方案应该正常编译。

我不知道它在地球上会发生什么,因为我的最新变化与所谓的错误地方毫无关系。该行引用了一些标准的LINQ函数(ToDictionary和{{1}}),它可以在下工作而无需任何更改。不幸的是,我无法创建任何MRE:很明显,此错误仅出现在我的巨大解决方案的上下文中,并且仅在可能无关的地方进行了一些特定的更改。

这是我尝试过的,但它没有效果:

  • 清洁+重建
  • 将目标框架从.NET 4.5更改为.NET 4.5.1或.NET 4.0

有没有人见过这样的怪癖?

3 个答案:

答案 0 :(得分:14)

我遇到了同样的问题,但这是在一个网站项目上 - 没有任何简单的方法来删除&amp;重新添加引用。幸运的是,我发现这个答案对我有用 - 甚至比搞乱参考更快 https://stackoverflow.com/a/29575865/3841490

  

向web.config添加新的程序集标记似乎解决了这个问题   问题。我添加的标签位于标签下,如下所示:

<assemblies>
     <add assembly="System.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
</assemblies>

答案 1 :(得分:3)

我有完全相同的问题,它似乎与两个包含相同程序集“System.Collections.Immutable”的NuGet包有关。两个NuGet包中的“Microsoft.Bcl.Immutable”(未列出)和“System.Collections.Immutable”。

我无法可靠地重现这个问题,似乎使用VS2015解决了这个问题。

但是,我建议寻找包含相同组件的NuGet包。

删除Microsoft.Bcl.Immutables为我解决了这个问题。

答案 2 :(得分:2)

检查项目中的所有(核心.net)引用是否有效,并且它们都引用相同的.NET框架版本。

如果有疑问,请删除所有引用并再次添加(使用4.0.0.0)版本。

我曾经遇到过这种情况(具有完全相同的错误),这是由于对引用版本的某些“搞砸”。我从来没有弄清楚它为什么会发生,但删除所有引用并再次添加它们对我有用。