Visual Studio просит меня ссылаться на несуществующую сборку

Я каким-то образом перенес свой проект в состояние, когда 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 (GroupBy и ToDictionary), и она работала месяцами без каких-либо изменений. К сожалению, я не могу создать никаких MRE: очевидно, эта ошибка появляется только в контексте моего огромного решения и только с некоторыми конкретными изменениями, сделанными в предположительно нерелевантных местах.

Вот что я пробовал, и это не сработало:

  • Очистить + Восстановить
  • Изменение целевой платформы от.NET 4.5 до.NET 4.5.1 или.NET 4.0

Кто-нибудь видел такую причуду раньше?

Ответ 1

Убедитесь, что все ссылки (core.net) в вашем проекте действительны, и все они ссылаются на одну и ту же версию платформы.NET.

Если есть сомнения, удалите все ссылки и добавьте их снова (используя версии 4.0.0.0).

Мне это случалось со мной однажды (с той же ошибкой), и это было связано с некоторыми "зависаниями" над версией ссылок. Я никогда не узнал, ПОЧЕМУ это произошло, но удаление всех ссылок и добавление их снова работало для меня.

Ответ 2

У меня была та же проблема, но это было на веб-сайте - не было простого способа удалить и повторно добавить ссылки. К счастью, я обнаружил, что этот ответ сработал для меня - и был еще быстрее, чем возиться со ссылками fooobar.com/questions/497958/...

добавление нового тега сборки в web.config, похоже, решило эту проблему. Я добавил тег под тегом и следующим образом:

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

Ответ 3

У меня была такая же проблема, и, похоже, она связана с двумя пакетами NuGet, содержащими ту же сборку "System.Collections.Immutable". Два пакета NuGet, где "Microsoft.Bcl.Immutable" ("Непосчитанные") и "System.Collections.Immutable".

Я не смог достоверно воспроизвести проблему, и, похоже, проблема была решена с помощью VS2015.

Тем не менее, я бы предложил искать пакеты NuGet, содержащие одну и ту же сборку.

Удаление Microsoft.Bcl.Immutables решило это для меня.