Приложению .NET Framework 4.7 не удается загрузить зависимость из стандартной библиотеки .NET из-за того, что NuGet выбиC#

Место общения программистов C#
Ответить
Anonymous
 Приложению .NET Framework 4.7 не удается загрузить зависимость из стандартной библиотеки .NET из-за того, что NuGet выби

Сообщение Anonymous »

У меня есть решение с двумя проектами:
  • Библиотека классов, ориентированная на .NET Standard 2.0
  • Приложение, ориентированное на .NET Framework 4.7
Библиотека .NET Standard ссылается на пакет NuGet, который поставляется разным сборки для разных целевых платформ.

Пример:
  • Папка .NET Standard в пакете содержит Assembly A
  • Папка .NET Framework содержит Assembly B
Эти сборки имеют разные простые имена.
Библиотека .NET Standard скомпилирована с сборкой A, однако приложение .NET Framework 4.7 восстанавливает сборку B, поскольку NuGet автоматически выбирает группу ресурсов .NETFramework.
При запуске приложения я получаю:

Код: Выделить всё

Could not load file or assembly 'AssemblyA'
Причина в том, что сборка A никогда не появляется в выходной папке приложения — восстанавливается только сборка B.
Я также нашел соответствующее объявление от Microsoft:

https://github.com/dotnet/announcements/issues/31
Эта проблема описывает, как старые методы разрешения зависимостей могут привести к отсутствию ресурсов при смешивании .NET Framework + .NET Стандартные + пакеты NuGet с разными TFM.

Что я пробовал
  • Миграция проекта .NET Framework в PackageReference
  • Очистка/сброс bin/obj и пересборка
  • Убедиться, что оба проекта ссылаются на одну и ту же версию пакета NuGet
  • Удалить прямую ссылку на пакет в приложении, чтобы использовать транзитивное восстановление
  • Проверить, поддерживает ли NuGet переопределение выбора ресурсов (например, выбор ресурсов .NET Standard из проекта .NET Framework)
NuGet последовательно выбирает ресурсы .NETFramework для проекта .NET Framework 4.7, поэтому восстанавливается только сборка B.

Вопрос
Существует ли какой-либо поддерживаемый способ заставить проект .NET Framework 4.7 использовать ресурсы .NET Standard пакет NuGet, чтобы зависимость, ожидаемая библиотекой .NET Standard (сборка A), была доступна во время выполнения?
Или этот сценарий просто не поддерживается, потому что:
  • NuGet выбирает ресурсы строго на основе целевой платформы потребляющего проекта
  • Сборки в каждой папке TFM имеют разные имена/личности
  • И, следовательно, их нельзя заменить с помощью перенаправления привязки или других механизмов?


Подробнее здесь: https://stackoverflow.com/questions/798 ... rary-due-t
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»