Приложение NetFramework, ссылающееся на библиотеку NetFramework в том же решении, ссылающееся на библиотеку NetStandard в другом решении: не удалось загрузить файл или сборку

Есть много похожих вопросов о проблемах со ссылкой на библиотеку классов .NET Standard из проекта .NET Framework, в которой зависимость пакета NuGet в библиотеке netstandard не передается в приложение netframework, и во время выполнения возникает ошибка Could not load file or assembly:

enter image description here

Существует множество источников, таких как приведенный ниже, которые указывают, что это можно решить, добавив отсутствующую зависимость в проект netframework:

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

Другие источники указывают, что это можно решить, добавив <RestoreProjectStyle>PackageReference</RestoreProjectStyle> и <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> в файл проекта netframework:

Я протестировал оба вышеупомянутых исправления с проектами, которые находятся в одном решении Visual Studio и имели успех, но я предпочитаю второй подход, потому что это решение "установи и забудь".

Проблема, которую я обнаружил, заключается в том, что я пытаюсь ссылаться на библиотеку классов netstandard из проекта netframework в другом решении VS и использую <RestoreProjectStyle>PackageReference</RestoreProjectStyle> и <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> в последнем проекте, В моем конкретном случае у меня есть исполняемый проект .NET Framework, который ссылается на библиотеку классов .NET Framework в том же решении, и эта библиотека классов ссылается на библиотеку классов .NET Standard в другом решении.

Я создал MCVE на GitHub, который демонстрирует это поведение. Я использую VS 2017 v15.9.4.

Помимо добавления пакетов непосредственно в проект netframework, есть ли способ заставить это работать?


(Примечание: здесь звучит похоже на проблему, но я не использую "щелкнуть один раз": qaru.site/info/2444845/...)

Ответы

Ответ 1

Вы можете заставить его работать без каких-либо изменений кода, если добавите что-то подобное в ваш app.config (адаптируйте версии и пути к своему контексту)

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly> 
            <assemblyIdentity name="Microsoft.Win32.Registry" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /><codeBase version="4.1.1.0"
                href="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.win32.registry\4.5.0\lib\net461\Microsoft.Win32.Registry.dll"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>