У меня есть проект .NET Standard 2.0 DLL.
У него нет других ссылок, кроме NETStandard.Library 2.0.1
, и все в порядке.
На него ссылается приложение WPF, и кажется, что все работает нормально.
Когда я добавляю пакет nuget для System.Collections.Immutable 1.5.0
в проект DLL, на * 1014 появляется желтый восклицательный знак.* корень обозревателя решений.(Хм ... Теперь я вижу, что восклицательный знак остается даже после удаления этого пакета, но я полагаю, что это ошибка VS, поскольку до добавления этой библиотеки все работало нормально)
Имея оба пакета, все прекрасно работает, но когда я пытаюсь использовать ImmutableDictionary
, я получаю это:
System.IO.FileNotFoundException: 'Couldне загружать файл или сборку 'System.Collections.Immutable, Version = 1.2.3.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a' или одну из ее зависимостей.Системе не удается найти указанный файл. '
Глядя на пакеты nuget, я понимаю, что эти два должны работать вместе, поскольку (из моего понимания) библиотека' System.Collections.Immutable` говорит об этомподдерживает стандарт .NET 2.0.
Я очень новичок в мире .NET Standard.
Просмотр токена открытого ключаиз System.Collections.Immutable.dll
в папке bin
моего основного приложения я вижу, что это действительно b03f5f7f11d50a3a
, как и ожидалось.Однако версия отличается.
Обычно в старых версиях .NET я пытаюсь добавить перенаправление сборки в файл конфигурации приложения.Но делать это здесь, похоже, не имеет никакого значения.Добавление этого в мое приложение WPF, которое ссылается на DLL:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
... изменяет исключение на следующее:
System.IO.FileNotFoundException: 'Не удалось загрузить файл илисборка 'System.Collections.Immutable, версия = 4.0.11.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a' или одна из ее зависимостей.Системе не удается найти указанный файл. '
Внутреннее исключение
FileNotFoundException: Не удалось загрузить файл или сборку' System.Collections.Immutable, Version = 1.2.3.0, Culture = нейтральный, PublicKeyToken =b03f5f7f11d50a3a 'или одна из его зависимостей.Система не может найти указанный файл.
Что здесь происходит?Разве я не могу использовать эти два пакета nuget вместе?
ОБНОВЛЕНИЕ:
Теперь я замечаю, что полученная мной версия DLL была от System.Collections.Concurrent.dll
, в то время как яинтересует System.Collections.Immutable.dll
, который нигде не найден в моих папках bin ... Я даже не нашел, где хранятся пакеты nuget в моем решении.
ОБНОВЛЕНИЕ 2:
Оказывается, что я получаю точно такое же поведение, когда создаю новое решение с аналогичной настройкой (консольное приложение Full Framework, ссылающееся на .NET Standard 2 DLL).
Следуя совету @Lasse Vågsæther Karlsen,Я скачал отсюда пакет nuget https://www.nuget.org/packages/System.Collections.Immutable,, извлек из него правильную DLL и поместил в папку bin.Затем сработало консольное приложение.
Я использую версию Visual Studio 15.7.1.Я не уверен, каковы изменения этого исправления в последней версии 15.7.2 ...
Вы можете попробовать мой проверяемый пример, загрузив его отсюда: https://mega.nz/#!YZMwGABD!eHHxvNdO59l2m5ZlHMG1vvqCd-GHv3EVckR-9htDojs