c# - 在 .net 核心和 .net 框架中使用 .net 标准包
问题描述
我有一个使用 .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中使用它时,这对我没有帮助。任何人都知道如何内联做这种事情?
感谢您提前提供任何指示!
解决方案
根据https://github.com/dotnet/cli/issues/6019,似乎存在问题AssemblyLoadContext
(或者确切地说是 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 但是,这当然意味着重新编译包。
推荐阅读
- java - 运行简单范围报告配置 TestNG 时出现 NoClassDefFoundError
- angular - 如何禁用内容区域在鼠标滚动时移动
- excel - 将下载日期转换为 CSV
- haskell - 与通用相关代码重叠的实例
- android - 在android中将searchview扩展到全长
- html - 检测div何时出现(jquery)
- vue.js - 向 VUE 中的动态对象添加“必需”验证
- python - 如何根据python中不同文件的变量名添加值
- notion-api - 使用概念 API 进行授权时出现错误“缺少或无效的 redirect_uri”
- c++ - 渲染单个事物而无需在 sdl 中清除整个屏幕