【问题标题】:Is it possible to work with a .NET 4.8 Library from .NET 6?是否可以使用 .NET 6 中的 .NET 4.8 库?
【发布时间】:2021-11-09 14:04:32
【问题描述】:

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

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

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

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

感谢您的帮助!

【问题讨论】:

  • 您不能同时拥有 .NET 和 .NET Framework 代码,甚至无法编译开始。如果你让它以某种方式编译,由于缺少库,它将在运行时(在 .NET 6 下)失败。您将需要 2 个独立的应用程序并在它们之间使用某种通信方法
  • 如果库依赖于 WCF,那么您将陷入困境:WCF 在 .NET 6 上不可用(至少以相同的形式)
  • @CamiloTerevinto 这不是真的,您可以从 .NET 6 引用 .NET 4.8,它会编译。在许多情况下,它甚至不会在运行时失败。在其他情况下,虽然它会。
  • @Evk 我专门讨论了这个场景,其中引用了 WCF 库
  • @codea this is not the topic, 实际上是。 WCF 是一个库,而不是一个协议。底层协议是 SOAP、.NET Remoting 或者可能是供应商创建的自定义协议。远程处理在 15 年前就过时了,只有 8* 很少的服务器使用它。没有什么能阻止您使用例如 Visual Studio 中的Connected Services 选项或svcutil 命令行工具为SOAP 创建和使用WCF 客户端。服务器使用什么协议?

标签: c# .net .net-6.0 .net-4.8


【解决方案1】:

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

您可以通过使用以下内容创建 .NET 4.8 库来轻松对其进行测试:

public class Test
{
    public static void OldNet()
    {
        Console.WriteLine("Hello from old .NET");
    }
}

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

 OldNet4.Test.OldNet();

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

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

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

【讨论】:

    【解决方案2】:

    是的,可以使用 .NET Framework 4.8 编写客户端,使用 .NET Core 6 编写服务器。也可以使用不同编程语言编写客户端和服务器,因此没有理由让您的用例是不可能的。但是,无法从 .NET Framework 程序集引用 .NET Core 程序集。

    【讨论】:

    • “是的,可以有一个用 .NET Framework 4.8 编写的客户端和一个用 .NET Core 6 编写的服务器”-> 这个问题专门针对 WCF,到目前为止,这是不可能的拥有任何 .NET Core/.NET 版本的 WCF 服务器。
    猜你喜欢
    • 1970-01-01
    • 2022-11-17
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多