c# - 在 .net 核心和 .net 框架中使用 .net 标准包

标签 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 中使用它时,这对我没有帮助。任何人都知道如何在线执行此类操作?

提前感谢您的指点!

最佳答案

根据 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 一起工作的开关,我看不到任何制作已编译版本的机会。

Anyone know how to do this sort of thing inline?

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

关于c# - 在 .net 核心和 .net 框架中使用 .net 标准包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52501579/

相关文章:

c# - 有没有比使用层次结构更好的显示对象的方法?

c# - 异步任务。使用 MVVM 运行

c# - 在派生类中转换接口(interface)属性

.net - 在 excel 数据透视表中过滤年、月和日的日期时间字段

c# - 将 Microsoft.Azure.ServiceBus 替换为 Azure.Messaging.ServiceBus

c# - 判断文件是否为图片

c# - 使用 linq 查找 List<List<string>> 的多个值中的任何一个

c# - .NET - 如何比较 2 个代码块之间的性能?

Azure WebJob 未记录到 Blob 存储

docker - 通过Docker在Raspberry Zero上支持dotnet核心