.net 4.7.2 библиотека, ссылающаяся на стандарт 2.0 NuGetPackage не работает

Мне нужно использовать пакет NuGet OPCFoundation.NetStandard.Opc.Ua в библиотеке классов.NET Framework 4.7.x.

До сих пор моей библиотекой классов была.NET Framework 4.7.0. Это работало хорошо, хотя пакет OPCFoundateion.NetStandard.Opc.Ua (.NET Standard 2.0) сгенерировал ОГРОМНУЮ кучу системных библиотек shim в папке bin. Совсем не хорошо, но это сработало.

Поскольку я нашел все эти десятки shim dll очень раздражающими, я провел некоторое исследование. В соответствии с различными статьями я узнал, что все эти библиотеки должны исчезнуть после обновления библиотеки классов до версии 4.7.2.

Ну, я так и сделал, но все стало только хуже.

Если вы попробуете это:

  1. Создать новое решение (VS2017, полностью обновлено)
  2. Создайте пустую библиотеку классов 4.7.2
  3. Импортируйте пакет OPCFoundation.NetStandard.Opc.Ua в библиотеку классов

происходит следующее:

  • Все еще системные shim-пакеты 83.* (и другие) загружаются, устанавливаются и сохраняются в папке Packages.

  • Появится 25 предупреждений: "Ссылочный компонент" System.xxxx.xxxx "не найден"

Если я игнорирую эти предупреждения и, тем не менее, пытаюсь использовать пакет, я получаю исключения времени выполнения, говорящие о том, что отсутствуют различные библиотеки DLL.

Что здесь происходит? Почему он не работает с 4.7.2, а с 4.7.0?

Я призываю вас попробовать это для себя, это очень, очень легко воспроизвести.

Я использую package.config для обработки NuGet, главным образом потому, что я не могу заставить наш сервер сборки TeamCity собрать проект, если я использую packageReferences.

1 ответ

Решение

.net 4.7.2 библиотека, ссылающаяся на стандарт 2.0 NuGetPackage не работает

Это известная проблема Проблемы со.NET Standard 2.0 с.NET Framework и NuGet, эти предупреждающие сообщения были добавлены из.net Framework 4.7.1 MS, чтобы напомнить пользователю, чтобы знать, что эта проблема существует. Вот почему он не работает с 4.7.2 пока он работает с 4.7,

Но предупреждения безобидны и просто присутствуют в IDE, но могут раздражать.

Чтобы устранить эти предупреждения, вы можете удалить эти System.* ссылки из вашего проекта, так как вы не можете использовать packageReferences,

См. Добавление стандартных библиотек.NET в 4.7.1. Lib добавляет множество ссылок, некоторые из которых не работают для получения дополнительной информации:

Надеюсь это поможет.

Другие вопросы по тегам