在完整的 .NET Framework 4.6 中使用 ASP.NET 核心功能
Using ASP.NET Core features in full .NET Framework 4.6
参考,似乎.NET 4.7.2 是前进的方向?
我们现有的应用程序使用 ASP.NET 样板以 .NET 4.6.1 为目标。
是否必须迁移到 .NET 4.7.* 才能利用 ASP.NET Core 2.1 功能?
要使用 .NET Core 2.1 功能,您需要以 .NET Core 2.1 为目标
有 .NET Standard,它是一系列实现中可用功能的交集,包括 .NET Core 和 .NET Framework。如果您的目标是 .NET Standard(某些特定版本),那么您可以使用该版本的 .NET Standard 中提供的功能,它应该 运行 在 .NET Framework 4.7.2 或 .NET Core 2.1 上。
作为一般指南:库(例如 Aspnet Boilerplate)现在应该 - 在可能的情况下 - 以 .NET Standard 为目标,但通常会有一个多目标构建以允许它们在内部 利用 特定框架的目标特定功能(可能使用增强的 "span" 或 .NET Core 中的 SIMD 功能)。
应用程序代码应该(必须,如果它是可执行文件)针对特定框架,例如 .NET Framework 或 .NET Core。
不,没有必要迁移到 .NET 4.7。* 以利用 ASP.NET Core 2.1 功能。
ASP.NET Core 2.x is made up of .NET Standard libraries. Apps written with .NET Standard 2.0 run anywhere that .NET Standard 2.0 is supported.
ASP.NET Core 2.x is supported on .NET Framework versions compatible with .NET Standard 2.0:
- .NET Framework 4.7.1 and later is strongly recommended.
- .NET Framework 4.6.1 and later.
如果您需要 Announcing .NET Framework 4.7.2 中的功能,您只需迁移到 .NET 4.7.2:
- ASP.NET – Dependency Injection in WebForms
- ASP.NET – SameSite Cookie
- ClickOnce – Per-monitor support for WPF and HDPI-aware ClickOnce deployed apps
- ClickOnce – Enable SHA256 timestamping of Deployment Manifests
- SQL – Azure AD Universal and Multi-factor Authentication Support
- BCL – Cryptographic Improvements
- BCL – ZLib decompression support to DeflateStream
- BCL – Additional Collection APIs
- WorkflowDesigner High Contrast Improvements
- WPF – Finding ResourceDictionaries by Source
- WPF – Finding ResourceDictionary owners
- WPF – Finding StaticResource references
参考文献:
实际上,如果您使用 .NET Core/Standard 构建应用程序,但在您的应用程序中,您可能有一些使用 .NET Framework 的参考,必须 是个大问题。
一个故事:我正在使用 ASP.NET Core 构建一个 Web 应用程序,在这个应用程序中,我想要一个将 HTML 转换为 pdf 的扩展。
我尝试在 Google 上搜索并找到了一个名为:itextsharp
的插件。而问题就出在这里。
itextsharp
使用的是 .NET Framework,而我的主要项目使用的是 .NET Core。因为我想创建一个 class 库来构建这个扩展,所以我有 3 个选项:
使用 .NET Core class 库。
使用 .NET Standard class 库。
使用 .NET Framwork class 库。
都可以参考主项目。 但是:
我不能使用itextsharp
引用(itextsharp.dll
、itextsharp.xtra.dll
、itextsharp.pdfa.dll
、itextsharp.xmlworker.dll
.. .) 在 .NET Core/Standard class 库中。所有这些都可以 运行 仅在目标 .NET Framework 上。
(由于许可,我还没有提到如何将代码转换为目标 .NET Standard 或 Core)
我的解决方案是:构建一个 .NET Framework 应用并将其发布到 exe
文件,然后作为参考附加到主项目。
P/S:目前,itextsharp
有一个核心版本,但我认为它还不够好(问题是:显示图像,带有unicode文本的字体,样式标签。 ..).
总的来说,如果您想构建一些使用目标 .NET X 的应用程序,您必须确保所有引用也可以使用目标 .NET X。
另一个例子:如果你想构建一个使用 Razor class library
的 class 库。您必须 确保所有引用都使用目标 .NET Core/Standard。因为 Razor class library
不能 引用 .NET Framework class 库。
参考
我们现有的应用程序使用 ASP.NET 样板以 .NET 4.6.1 为目标。
是否必须迁移到 .NET 4.7.* 才能利用 ASP.NET Core 2.1 功能?
要使用 .NET Core 2.1 功能,您需要以 .NET Core 2.1 为目标
有 .NET Standard,它是一系列实现中可用功能的交集,包括 .NET Core 和 .NET Framework。如果您的目标是 .NET Standard(某些特定版本),那么您可以使用该版本的 .NET Standard 中提供的功能,它应该 运行 在 .NET Framework 4.7.2 或 .NET Core 2.1 上。
作为一般指南:库(例如 Aspnet Boilerplate)现在应该 - 在可能的情况下 - 以 .NET Standard 为目标,但通常会有一个多目标构建以允许它们在内部 利用 特定框架的目标特定功能(可能使用增强的 "span" 或 .NET Core 中的 SIMD 功能)。
应用程序代码应该(必须,如果它是可执行文件)针对特定框架,例如 .NET Framework 或 .NET Core。
不,没有必要迁移到 .NET 4.7。* 以利用 ASP.NET Core 2.1 功能。
ASP.NET Core 2.x is made up of .NET Standard libraries. Apps written with .NET Standard 2.0 run anywhere that .NET Standard 2.0 is supported.
ASP.NET Core 2.x is supported on .NET Framework versions compatible with .NET Standard 2.0:
- .NET Framework 4.7.1 and later is strongly recommended.
- .NET Framework 4.6.1 and later.
如果您需要 Announcing .NET Framework 4.7.2 中的功能,您只需迁移到 .NET 4.7.2:
- ASP.NET – Dependency Injection in WebForms
- ASP.NET – SameSite Cookie
- ClickOnce – Per-monitor support for WPF and HDPI-aware ClickOnce deployed apps
- ClickOnce – Enable SHA256 timestamping of Deployment Manifests
- SQL – Azure AD Universal and Multi-factor Authentication Support
- BCL – Cryptographic Improvements
- BCL – ZLib decompression support to DeflateStream
- BCL – Additional Collection APIs
- WorkflowDesigner High Contrast Improvements
- WPF – Finding ResourceDictionaries by Source
- WPF – Finding ResourceDictionary owners
- WPF – Finding StaticResource references
参考文献:
实际上,如果您使用 .NET Core/Standard 构建应用程序,但在您的应用程序中,您可能有一些使用 .NET Framework 的参考,必须 是个大问题。
一个故事:我正在使用 ASP.NET Core 构建一个 Web 应用程序,在这个应用程序中,我想要一个将 HTML 转换为 pdf 的扩展。
我尝试在 Google 上搜索并找到了一个名为:itextsharp
的插件。而问题就出在这里。
itextsharp
使用的是 .NET Framework,而我的主要项目使用的是 .NET Core。因为我想创建一个 class 库来构建这个扩展,所以我有 3 个选项:
使用 .NET Core class 库。
使用 .NET Standard class 库。
使用 .NET Framwork class 库。
都可以参考主项目。 但是:
我不能使用itextsharp
引用(itextsharp.dll
、itextsharp.xtra.dll
、itextsharp.pdfa.dll
、itextsharp.xmlworker.dll
.. .) 在 .NET Core/Standard class 库中。所有这些都可以 运行 仅在目标 .NET Framework 上。
(由于许可,我还没有提到如何将代码转换为目标 .NET Standard 或 Core)
我的解决方案是:构建一个 .NET Framework 应用并将其发布到 exe
文件,然后作为参考附加到主项目。
P/S:目前,itextsharp
有一个核心版本,但我认为它还不够好(问题是:显示图像,带有unicode文本的字体,样式标签。 ..).
总的来说,如果您想构建一些使用目标 .NET X 的应用程序,您必须确保所有引用也可以使用目标 .NET X。
另一个例子:如果你想构建一个使用 Razor class library
的 class 库。您必须 确保所有引用都使用目标 .NET Core/Standard。因为 Razor class library
不能 引用 .NET Framework class 库。