代码之家  ›  专栏  ›  技术社区  ›  Rob

在.NET核心和.NET框架中使用.NET标准包

  •  3
  • Rob  · 技术社区  · 7 年前

    我有一个使用.NET标准2.0构建的包。我希望能够在.NET框架和.NET核心应用程序中使用它,但它有以下代码行:

    using System.Runtime.Loader;
    
    …
    
    AssemblyLoadContext.Default.Unloading += (ctx) => ProcessStop();
    …
    

    这不适用于.NET框架(似乎System.Runtime.Loader是一个仅核心的包)。我可以在编译时使用这种语句省略它:

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

    当包已经编译并且我想在.NET框架中使用它时,这对我没有帮助。有人知道怎么做这种事吗?

    感谢您提前指点!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Peter Wurzinger    7 年前

    好像有个问题 AssemblyLoadContext (或精确的system.runtime.loader包)根据 https://github.com/dotnet/cli/issues/6019 包声称支持.NET框架(和NetStandard1.5),但显然不支持。因此,是的,System.Runtime.Loader似乎是一个只包含核心内容的包——在我看来,这绝对违背了.NET标准的概念……

    现在的结果是,您提到的.NET标准2.0包没有 真正地 支持.NET标准2.0,但.NET核心=1.0(从System.Runtime.Loader的角度看)。我看不到任何机会使一个已经编译的版本没有提到的开关与.NET框架一起工作。

    有人知道怎么做这种事吗?

    当将上述库作为nuget包提供时,可以将特定于运行时的实现提取到特定于运行时的dll: https://docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks 但是,这当然意味着重新编译包。

    推荐文章