是否可以使用 .NET 6 中的 .NET 4.8 库?

cod*_*dea 10 .net c# .net-4.8 .net-6.0

我需要引用一个仅适用于 .NET 4.8 的专有客户端库,没有其他选择,这是一个非常狭窄的供应商库,我们必须将其与 .NET 48 一起使用。

正在开发的新应用程序是一个服务应用程序,需要长期维护。而且这个应用程序只安装在windows上就可以了。但我们希望应用程序能够从 .NET 6 中受益,同时能够使用 .NET 4.8 客户端库。

所以我的问题是:什么是/可能是一个好的解决方案:

  1. 我需要 4.8 中的一些代码才能使用该库。
  2. 利用 .NET 6 和未来的增强功能

感谢您的帮助!

Evk*_*Evk 12

是的,您可以从 .NET 6 引用 .NET 4.8 程序集。但是,不能保证它会按预期工作。仅当它不使用 .NET 6(或更确切地说是 .NET 4.8 支持的 .NET 标准版本)中不存在的任何 API,并且它使用的 API 没有发生重大(对于该应用程序逻辑)更改时,它才会起作用。

您可以通过使用如下内容创建 .NET 4.8 库来轻松测试它:

public class Test
{
    public static void OldNet()
    {
        Console.WriteLine("Hello from old .NET");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后从 .NET 6 引用它并调用:

 OldNet4.Test.OldNet();
Run Code Online (Sandbox Code Playgroud)

运行它会打印“Hello from old .NET”,没问题。

但是,如果您在旧的 .NET 4.8 库中使用Thread.Abort- 当在 .NET 6 上运行时,它不会中止目标线程,而是会抛出PlatformNotSupportedException,这是一个重大更改的示例。如果它调用缺失的 api,那么它会抛出TypeNotFound或类似的异常。

所以最终结果取决于所引用的库。