【问题标题】:Using a .net standard package in .net core and .net framework在 .net 核心和 .net 框架中使用 .net 标准包
【发布时间】:2018-09-25 15:17:45
【问题描述】:

我有一个使用 .net Standard 2.0 构建的包。我希望能够在 .net Framework 和 .net Core 应用程序中使用它,但它具有以下代码行:

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 Framework 中使用它时,这对我没有帮助。有人知道如何内联做这种事情吗?

提前感谢您的任何指点!

【问题讨论】:

  • “它不起作用”是什么意思?你有运行时错误吗?编译错误?按 F5 时鲨鱼会吃掉你的电脑吗?

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


【解决方案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(来自 System. Runtime.Loader 的观点)。如果没有提到的开关,我看不到任何机会让已经编译的版本与 .NET-Framework 一起使用。

有人知道如何内联做这种事情吗?

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

【讨论】:

    猜你喜欢
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    相关资源
    最近更新 更多