在.net core和.net框架中使用.net标准包

时间:2018-09-25 15:17:45

标签: c# .net .net-core .net-standard

我有一个使用.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 :(得分:1)

根据https://github.com/dotnet/cli/issues/6019AssemblyLoadContext(或确切地说是System.Runtime.Loader包)似乎存在问题 该软件包声称支持.NET-Framework(和netstandard1.5),但显然不支持。所以,是的,System.Runtime.Loader似乎是一个仅用于核心的程序包-我认为这绝对会歪曲.NET-Standard的概念...

现在的结果是,您提到的.NET-Standard 2.0软件包并不真正支持.NET-Standard 2.0,而是.NET-Core> = 1.0(来自系统)。 Runtime.Loader的观点)。如果没有提到的开关与.NET-Framework一起使用,我看不出有任何机会制作已经编译的版本。

  

任何人都知道如何内联地做这种事情吗?

以NuGet-package形式提供上述库时,可以将运行时特定的实现提取到运行时特定的DLL:https://docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks 但这当然意味着重新编译该软件包。