Использование стандартного пакета .net в ядре .net и .net framework - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть пакет, созданный с использованием .net Standard 2.0.Я хочу использовать его как в приложениях .net Framework, так и в приложениях .net Core, но в нем есть следующая строка кода:

using System.Runtime.Loader;

…

AssemblyLoadContext.Default.Unloading += (ctx) => ProcessStop();
…

Это не работает для .net Framework (похоже,System.Runtime.Loader - пакет только для ядра).Я могу опустить его во время компиляции, используя такой оператор:

#if NETCOREAPP2_0 || NETCOREAPP2_1
            AssemblyLoadContext.Default.Unloading += (ctx) => ProcessStop();
#endif

, который не помогает мне, когда пакет уже скомпилирован, и я хочу использовать его в .net Framework.Кто-нибудь знает, как сделать такую ​​вещь в строке?

Спасибо за любые указатели заранее!

1 Ответ

0 голосов
/ 25 сентября 2018

Кажется, что есть проблема с AssemblyLoadContext (или точнее с пакетом System.Runtime.Loader) в соответствии с https://github.com/dotnet/cli/issues/6019 Пакет утверждает, что поддерживает .NET-Framework (и netstandard1.5)но, видимо, нет.Так что да, System.Runtime.Loader, похоже, является пакетом только для ядра - что, на мой взгляд, абсолютно искажает концепцию .NET-Standard ...

Следствием этого является то, что .NET- Стандартный пакет 2.0, который вы упомянули, не на самом деле поддерживает .NET-Standard 2.0, но .NET-Core> = 1.0 (с точки зрения System.Runtime.Loader).Я не вижу никаких шансов заставить уже скомпилированную версию без упомянутого коммутатора работать с .NET-Framework.

Кто-нибудь знает, как сделать это встроенным способом?

При предоставлении упомянутой библиотеки в виде NuGet-пакета существует возможность извлечения реализаций, специфичных для среды выполнения, в библиотеки DLL, специфичные для среды выполнения: https://docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks Но это, конечно, подразумевает перекомпиляцию пакета.

...