Несовместимые .NET Стандартные сборки, которые должны были быть совместимы? - PullRequest
0 голосов
/ 09 июня 2018

У меня есть проект .NET Standard 2.0 DLL.

Project target framework

У него нет других ссылок, кроме NETStandard.Library 2.0.1, и все в порядке.

На него ссылается приложение WPF, и кажется, что все работает нормально.

Когда я добавляю пакет nuget для System.Collections.Immutable 1.5.0 в проект DLL, на * 1014 появляется желтый восклицательный знак.* корень обозревателя решений.(Хм ... Теперь я вижу, что восклицательный знак остается даже после удаления этого пакета, но я полагаю, что это ошибка VS, поскольку до добавления этой библиотеки все работало нормально)

exclamation without explanation...

Имея оба пакета, все прекрасно работает, но когда я пытаюсь использовать ImmutableDictionary, я получаю это:

System.IO.FileNotFoundException: 'Couldне загружать файл или сборку 'System.Collections.Immutable, Version = 1.2.3.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a' или одну из ее зависимостей.Системе не удается найти указанный файл. '

Глядя на пакеты nuget, я понимаю, что эти два должны работать вместе, поскольку (из моего понимания) библиотека' System.Collections.Immutable` говорит об этомподдерживает стандарт .NET 2.0.

packages

Я очень новичок в мире .NET Standard.

Просмотр токена открытого ключаиз System.Collections.Immutable.dll в папке bin моего основного приложения я вижу, что это действительно b03f5f7f11d50a3a, как и ожидалось.Однако версия отличается.

Hm...

Обычно в старых версиях .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

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

В моем случае оказывается, что проекты в одном решении имеют разные версии System.Collections.Immutable.dll.(1.4.0 и 1.5.0)

Некоторые как MSBuild не замечает, что есть 2 версии dll и пытается найти и загрузить версию dll 1.5.0 вместо 1.4.0 в каком-то проекте.

Чтобы решить эту проблему , просто обновите и убедитесь, что каждый proj.в том же sln есть такая же версия dll.

С этой же проблемой сталкиваюсь и с Syste.Net.Http.

0 голосов
/ 19 июня 2018

Существует два способа исправить это:

1 - обновить файл проекта для ConsoleApp1, чтобы включить его в группу свойств

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

2 - добавить ссылку на System.Collections.Immutable непосредственно в проекте ConsoleApp1.

Это известная проблема, когда использование ссылок Project-to-Project и ссылок пакета NuGet не обеспечивает правильную передачу ссылок автоматически.Это отслеживается здесь , но один из этих обходных путей должен разблокировать это.

...