我需要引用一个只适用于.NET 4.8的专有客户端库,没有其他选择,这是一个非常狭窄的供应商库,我们必须使用它与.NET 48。正在开发的新应用程序是一个服务应用程序,需要长期维护。这个应用程序只安装在Windows上是可以的。但我们希望应用程序能够从.NET 6中受益,同时能够使用.NET 4.8客户端库。所以我的问题是:什么会/可能是一个好的解决方案:1.我需要在4.8中编写一些代码来使用这个库。1.利用.NET 6和未来的增强功能谢谢你的帮助!
tyg4sfes1#
是的,您可以从.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"); } }
字符串然后从.NET 6引用它并调用:
OldNet4.Test.OldNet();
型运行,它将打印“你好,从旧的.NET”没有问题。但是,如果你在旧的.NET 4.8库中使用Thread.Abort-当在.NET 6上运行时,它不会中止目标线程,而是会抛出PlatformNotSupportedException,这是一个破坏性更改的例子。如果它调用缺少的API,那么它将抛出TypeNotFound或类似的异常。因此,最终结果取决于所引用的库。
Thread.Abort
PlatformNotSupportedException
TypeNotFound
afdcj2ne2#
是的,可以使用.NET Framework 4.8编写客户端,使用.NET Core 6编写服务器。也可以使用不同的编程语言编写客户端和服务器,因此您的用例没有理由不可能。但是,不可能从.NET Framework程序集引用.NET Core程序集。
anauzrmj3#
0是的,在同一进程中同时使用.net Core和.net Framework是可能的,前提是您将它们作为完全独立的程序集来保存,并且您愿意通过COM进行交互。在https://github.com/dotnet/samples/tree/main/core/extensions/NetComSxS中提供了如何以这种方式进行交互的示例。
3条答案
按热度按时间tyg4sfes1#
是的,您可以从.NET 6引用.NET 4.8程序集。但是,不能保证它会按预期工作。只有当它不使用.NET 6(或者.NET 4.8支持的.NET标准版本)中不存在的任何API,并且它使用的API没有中断(对于该应用程序逻辑)更改时,它才会工作。
您可以通过创建.NET 4.8库来轻松测试它,如下所示:
字符串
然后从.NET 6引用它并调用:
型
运行,它将打印“你好,从旧的.NET”没有问题。
但是,如果你在旧的.NET 4.8库中使用
Thread.Abort
-当在.NET 6上运行时,它不会中止目标线程,而是会抛出PlatformNotSupportedException
,这是一个破坏性更改的例子。如果它调用缺少的API,那么它将抛出TypeNotFound
或类似的异常。因此,最终结果取决于所引用的库。
afdcj2ne2#
是的,可以使用.NET Framework 4.8编写客户端,使用.NET Core 6编写服务器。也可以使用不同的编程语言编写客户端和服务器,因此您的用例没有理由不可能。但是,不可能从.NET Framework程序集引用.NET Core程序集。
anauzrmj3#
0
是的,在同一进程中同时使用.net Core和.net Framework是可能的,前提是您将它们作为完全独立的程序集来保存,并且您愿意通过COM进行交互。
在https://github.com/dotnet/samples/tree/main/core/extensions/NetComSxS中提供了如何以这种方式进行交互的示例。