Sha*_*med 6 c# visual-studio .net-4.8 .net-6.0
今天是个好日子!我有一个针对 .Net Framework 6.0 的类库项目。当我将此 dll 引用到另一个面向 .Net Framework 4.8 的项目时,我收到以下错误消息
我会感谢你的帮助。
简短的回答是“你不能”。.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(从您的屏幕截图来看,您正在使用它),因此进行更改应该相当简单。
小智 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
.NET 6 dll 可能使用的与内存相关的 API,例如 Memory<T> 和 Span<T>,.Net Framework 既不原生也不完全支持
https://learn.microsoft.com/en-us/dotnet/standard /内存和跨度/
https://github.com/dotnet/corefxlab/issues/2581
.NET Framework 不支持许多 .NET 运行时变量
https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-environment-variables
.NET 6 支持 CPU CET 安全功能,而 .NET Framework 不支持。 https://github.com/dotnet/runtime/blob/release/6.0/docs/design/features/intel-cet-dotnet6.md
.NET 工具也不同于 .NET Framework
https://learn.microsoft.com/en-us/dotnet/core/project-sdk/overview
https://learn.microsoft.com/en-us/dotnet/core /工具/
补充笔记
由语言编译器(例如 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 -库支持)
| 归档时间: |
|
| 查看次数: |
9787 次 |
| 最近记录: |