我以某种方式将我的项目带到了一个状态,在这个状态下,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:很明显,此错误仅出现在我的巨大解决方案的上下文中,并且仅在可能无关的地方进行了一些特定的更改。
这是我尝试过的,但它没有效果:
有没有人见过这样的怪癖?
答案 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)版本。
我曾经遇到过这种情况(具有完全相同的错误),这是由于对引用版本的某些“搞砸”。我从来没有弄清楚它为什么会发生,但删除所有引用并再次添加它们对我有用。