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

Я каким-то образом довел свой проект до состояния, когда Visual Studio 2013 не может его скомпилировать с нелепой ошибкой:

Тип System.Collections.Generic.Dictionary`2 определен в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку «System.Collections, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a».

Во-первых, такой сборки нет, она не существует. Во-вторых, Dictionary<TKey, TValue> определяется в mscorlib.dll, на который, конечно же, ссылаются по умолчанию. Resharper (имеющий собственный механизм анализа кода) сообщает, что решение должно компилироваться нормально.

Я не знаю, как это вообще могло случиться, потому что мои последние изменения вообще не имеют ничего общего с якобы ошибочным местом. Строка ссылается на некоторые стандартные функции LINQ (GroupBy и ToDictionary) и работала месяцы без каких-либо изменений. К сожалению, я не могу создать никаких MRE: очевидно, эта ошибка появляется только в контексте моего огромного решения и только с некоторыми специфическими изменениями, внесенными в предположительно неактуальные места.

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

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

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


person Skiminok    schedule 16.01.2015    source источник
comment
Это портативная библиотека? Возможно, заглушки как-то сломались.   -  person leppie    schedule 16.01.2015
comment
@leppie Нет, это обычная библиотека классов, предназначенная для .NET 4.5.   -  person Skiminok    schedule 16.01.2015


Ответы (3)


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

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

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

person Jcl    schedule 16.01.2015
comment
Это волшебство переписало половину моего файла .csproj, и теперь проект собирается :) Спасибо! Хотел бы я знать, что там происходит во внутренностях MSBuild... - person Skiminok; 17.01.2015
comment
Удаление всех ссылок звучит слишком пугающе для меня... Есть ли способ распечатать зависимости ссылок перед их удалением? - person user3207158; 13.05.2019

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

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

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

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

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

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

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

person CoolMcGrrr    schedule 02.03.2017
comment
Спасибо, у меня была такая же проблема, и она появилась только тогда, когда я попытался опубликовать свой сайт, локально все было в порядке. - person Paul Becker; 07.08.2017
comment
@PaulBecker Рад помочь! :) - person CoolMcGrrr; 07.08.2017