首页 > 解决方案 > 使用 .NET 5.0 中的类型,同时保持与早期 .NET 版本(如 .NET Core 3.1)的兼容性

问题描述

假设您想要使用System.Half的 .NET Core 3.1 应用程序(或更旧的应用程序)使用您的库。我可以简单地复制System.Half实现并失去旧 .NET 版本的内在优化行为,但我可以在单个程序集中这样做吗?

据我所知,这是不可能的(除非采用反射式方法,或者在首次使用时发出 IL 的疯狂行为):上述场景需要使用内置的 .NET 5.0System.Half和更早版本单独构建.NET 版本(使用我们的内部System.Half)。

但我希望是否有某种方法可以编译/配置具有一些创造性类型转发的单个程序集,以在可用时利用给定类型的 .NET 5.0 版本,否则使用 shim。

(这个问题与语言无关,并不特定于 just System.Half

标签: c#.net-coreclrcoreclr.net-5

解决方案


简而言之:不,不可能在单个程序集中进行- 这需要通过多目标库 5.0+ 和您想要支持的最低版本的 .NET CCore 并创建此库的 NuGet 包来完成。

然后使用该库的应用程序将选择最佳匹配程序集,因此 .NET 5/6/+ 应用程序将使用运行时的 System.Half 实现获得您的 .NET 5.0 切片,而 .NET Core 3.1 应用程序将获得包含您的实现的另一个切片System.Half 你放在一个#if.

即使您不想多目标您的库,也需要一个不同的 NuGet 包,它为 .NET (Core) < 5.0 提供一个包含 System.Half 实现的切片。然后,您的库将依赖此包,导致消费者可传递地使用此包。


推荐阅读