Удалите ссылку в разделе "Ссылки".
Подойдите к папке с вашими пакетами и найдите эту сборку во всех пакетах.
Найдите любую неправильную версию сборки. Если вы его найдете, то увидите, в какой пакет nuget он втягивается. Если вы найдете тот, который является неправильной версией, войдите в VS и удалите этот пакет nuget из всех проектов.
Еще один шаг по устранению неполадок - открыть файл проекта как XML и найти тег Reference. Обычно существует HintPath, подобный этому, который укажет вам на проблемный пакет или жесткую ссылку. (Под "нарушением" я подразумеваю позволить нам определить, где обнаруживается сборка, которая является неправильной несовместимой версией)
<HintPath>..\packages\Microsoft.Bcl.1.1.10\lib\net40\System.IO.dll</HintPath>
Вот как вы обнаружите плохой жестко запрограммированный путь в результате того, что кто-то использует опцию «Обзор» при добавлении сборки, что является плохой практикой при работе со сборками BCL.
Обратите внимание, что я никогда не редактирую файл проекта на этом этапе, чтобы изменить ссылку. Это просто, чтобы выяснить, где находится нарушитель, и удалить либо пакет, либо плохую сборку, если другой разработчик проверил двоичный файл для решения (еще одна ужасная практика для библиотек BCL).
Очистить + перестроить, и он должен быть сломан, потому что нет ссылки на сборку.
На этом этапе я убрал плохую ссылку. Раньше я использовал Add Reference -> и выбирал из раздела Framework. Это в основном ссылка GAC.
В эти дни я теперь получаю соответствующий пакет nuget, который должен добавить правильную ссылку на основе вашей целевой платформы, вы можете явно выбрать версию сборки, которую хотите, просто убедитесь, что все связанные проекты в вашем решении используют одну и ту же версию, чтобы избежать проблемы: https://www.nuget.org/packages/System.IO/
Это может быть сложно решить, потому что часто это не официальный пакет для вашей отдельной сборки, а содержится в более крупном пакете с именем вроде Microsoft.BCL или Microsoft.AspNet.WebAPI.Client (который я использовал для получения сборок Http ). Это то, что я считаю наиболее сложным, но похоже, что ссылка выше должна предоставить вам конкретную версию, которая вам нужна (надеюсь).
Установка пакета nuget должна добавить ссылку на ваш проект сейчас (именно поэтому мы удалили любую другую ссылку, которая помешала бы добавить правильную). Дважды проверьте вкладку «Вывод» и различные разделы «Показать вывод из:», чтобы убедиться, что во время установки nuget не было ошибок.
В наши дни большинство из них загружаются через пакет nuget, чтобы синхронизировать версии во всех ваших связанных проектах. Честно говоря, я не понимаю, почему классы BCL втягиваются через Nuget сейчас, когда они являются частью установленного фреймворка, но именно так, кажется, все делается сейчас, и как я заставляю их работать последовательно.
person
AaronLS
schedule
31.07.2017
System.IO
. У вас есть более приземленная проблема, когда ваша сборка неправильно сконфигурирована, например, ссылка на сборки, которые не соответствуют вашей платформе (которые затем косвенно ссылаются наSystem.IO
). Сборки .NET Framework не совпадают с версиями этих сборок .NET Standard; в этом смысле они не эквивалентны, и вы не можете смешивать и сочетать. Проект .NET Standard должен ссылаться только на сборки .NET Standard. - person Jeroen Mostert   schedule 31.07.2017System.IO.FileSystem
, когда установлена 4.3.0. Однако установить точную причину на расстоянии сложно. Разрешение зависимостей NuGet, как известно, сложно. Часто он не будет автоматически делать правильные вещи в отношении версий в разных проектах. - person Jeroen Mostert   schedule 01.08.2017