- Библиотека классов, ориентированная на .NET Standard 2.0
- Приложение, ориентированное на .NET Framework 4.7
Пример:
- Папка .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'Я также нашел соответствующее объявление от Microsoft:
https://github.com/dotnet/announcements/issues/31
Эта проблема описывает, как старые методы разрешения зависимостей могут привести к отсутствию ресурсов при смешивании .NET Framework + .NET Стандартные + пакеты NuGet с разными TFM.
Что я пробовал
- Миграция проекта .NET Framework в PackageReference
- Очистка/сброс bin/obj и пересборка
- Убедиться, что оба проекта ссылаются на одну и ту же версию пакета NuGet
- Удалить прямую ссылку на пакет в приложении, чтобы использовать транзитивное восстановление
- Проверить, поддерживает ли NuGet переопределение выбора ресурсов (например, выбор ресурсов .NET Standard из проекта .NET Framework)
Вопрос
Существует ли какой-либо поддерживаемый способ заставить проект .NET Framework 4.7 использовать ресурсы .NET Standard пакет NuGet, чтобы зависимость, ожидаемая библиотекой .NET Standard (сборка A), была доступна во время выполнения?
Или этот сценарий просто не поддерживается, потому что:
- NuGet выбирает ресурсы строго на основе целевой платформы потребляющего проекта
- Сборки в каждой папке TFM имеют разные имена/личности
- И, следовательно, их нельзя заменить с помощью перенаправления привязки или других механизмов?
Подробнее здесь: https://stackoverflow.com/questions/798 ... rary-due-t
Мобильная версия