如何在.Net Framework 4.8中引用.Net 6.0 dll

Sha*_*med 6 c# visual-studio .net-4.8 .net-6.0

今天是个好日子!我有一个针对 .Net Framework 6.0 的类库项目。当我将此 dll 引用到另一个面向 .Net Framework 4.8 的项目时,我收到以下错误消息

在此输入图像描述

我会感谢你的帮助。

Ric*_*ard 7

简短的回答是“你不能”。.NET 6 和 .Net Framework 4.8 是完全不同的东西,并且彼此不兼容。

如果您想要一个可以在 .NET Framework 和 .NET 中工作的库,您需要研究.NET Standard,特别是版本 2.0。它没有包含所有内容,但可以从 .NET Framework 和 .NET 5/6(以及早期版本的 Core)引用它。

话虽这么说(h/t PMF),如果您能够将应用程序更新为 .NET 6,那就更好了。.NET 6 支持 WinForms(从您的屏幕截图来看,您正在使用它),因此进行更改应该相当简单。

  • 更好的选择是开始将应用程序升级到.NET6.0。 (4认同)

小智 1

回答

无法从 .NET Framework 4.8 应用程序使用 .NET 6 DLL。根据设计,.NET Framework 4.8 不支持 .NET (.NET Core) 应用/dll。它们是 .NET 的不同“实现”: https:
//learn.microsoft.com/en-us/dotnet/fundamentals/implementations
“.NET 应用程序是为 .NET 的一个或多个实现开发的......”

“实现”由许多 API 组成,其中包括运行时环境 (CLR)。
https://learn.microsoft.com/en-us/dotnet/standard/clr

从 .NET Core 2.1 到 .NET 6,添加了许多 API,因此 .NET 6 有许多 .NET Framework 4.8 没有的 API: https:
//learn.microsoft.com/en-us/dotnet/ core/whats-new/dotnet-core-2-1
https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-6

除了一般 API 差异之外,以下是 .NET Framework 4.8 不支持的 .NET 6 功能的一些示例。

  • .NET 6 支持.NET Framework 不支持的与运行时相关的 json 文件,例如 .runtimeconfig.json 和 .deps.json:https:
    //github.com/dotnet/runtime/blob/release/6.0/docs/设计/功能/主机组件.md

  • ModuleIntializerAttribute(运行时库,C#9)

  • SkipLocalsInitAttribute(运行时库,C#9)

  • AsyncMethodBuilderAttribute(运行时库,C#10 方法)

  • InterpolatedStringHandler(运行时库,C#10)

  • CallArgumentExpressionAttribute(运行时库,C#10)

https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/attributes/general


补充笔记

由语言编译器(例如 C#)生成的 MSIL 代码显然在很大程度上(如果不是完全)兼容。因此,.NET 和 .NET Framework 之间的许多运行时不兼容性似乎与字节码无关。一些不兼容性与运行时基础结构和编译器生成的基于语言版本的 API 调用有关。 https://github.com/dotnet/runtime/issues/7757

有时可以从 .NET 6 应用程序使用 .NET Framework 4.8 DLL。例如,如果 .NET Framework DLL 仅使用 .NET Standard 2.0 API。例如,我已经使用 .NET 7 应用程序中的 .NET Framework 4.8 DLL 进行了测试,并且它有效。我个人不会在生产中使用这种场景,但其他人可能会决定这样做。请参阅“.NET Core 代码可以引用现有的 .NET Framework 库”: https:
//learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-2-0#api-changes-and -库支持