在 .NET Core 和 .NET Framework 中使用 .NET Standard 包

4

我有一个使用 .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 中使用已编译的包时,这并不能帮到我。有没有人知道如何在代码中实现此类操作呢?

提前感谢任何指导!


3
“it doesn't work” 是什么意思?你是否收到运行时错误?编译错误?按F5键时鲨鱼会吃掉你的电脑吗? - nvoigt
1个回答

1
看起来有关AssemblyLoadContext的问题(或者更确切地说是System.Runtime.Loader包)根据https://github.com/dotnet/cli/issues/6019的说法。该包声称支持.NET-Framework(和netstandard1.5),但显然并不支持。所以,是的,System.Runtime.Loader似乎只是一个核心包 - 这在我看来完全颠覆了.NET-Standard的概念...
现在的结果是,你提到的.NET-Standard 2.0包不是真正支持.NET-Standard 2.0,而是.NET-Core >= 1.0(从System.Runtime.Loader的角度来看)。我没有看到任何机会使已经编译好的版本在.NET-Framework上工作,而不需要那个被提到的开关。
“有人知道如何内联执行这种操作吗?”

将所提到的库作为NuGet包提供时,有可能将特定于运行时的实现提取到特定于运行时的DLL中: https://learn.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks 但这当然意味着需要重新编译包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接