14

我不知何故将我的项目带到了 Visual Studio 2013 无法编译它并出现荒谬错误的状态:

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

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

我不知道这到底是怎么发生的,因为我最近的变化与所谓的错误地方完全无关。该行引用了一些标准的 LINQ 函数(GroupByToDictionary),它工作了几个月,没有任何变化。不幸的是,我无法创建任何 MRE:显然,此错误仅出现在我的庞大解决方案的上下文中,并且仅在可能不相关的地方进行了一些特定更改。

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

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

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

4

3 回答 3

19

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

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

<assemblies>
     <add assembly="System.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
</assemblies>
于 2015-06-05T00:02:59.137 回答
4

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

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

但是,我建议寻找包含相同程序集的 NuGet 包。

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

于 2017-03-02T15:02:48.200 回答
2

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

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

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

于 2015-01-16T07:13:08.217 回答