.Net Core 3.x 与 .Net Framework 4.7 的兼容性

Posted

技术标签:

【中文标题】.Net Core 3.x 与 .Net Framework 4.7 的兼容性【英文标题】:.Net Core 3.x compatibility with .Net Framework 4.7 【发布时间】:2020-07-07 09:15:16 【问题描述】:

我有一个针对 .Net Core 3.0 的 Visual Studio Azure App Service 项目。当我将它部署到 Azure 时,我没有指定 Stack,Stack 最终是 .Net V4.7。

这篇文章提出了类似的问题:https://social.msdn.microsoft.com/Forums/en-US/a4040bf9-2ba0-42c6-a242-87febf7a5e6d/select-net-core-22-as-technology-stack?forum=windowsazurewebsitespreview 答案是“.NET Core SDK 32 位二进制文​​件通常包含在 Windows 应用服务中。因此,无需明确选择 .NET Core 作为版本”。换句话说:因为它是 Windows,所以无需指定 .Net Core 目标。这意味着因为它是 Windows,所以它可以正常工作。

这篇文章还提出了一个类似的问题:Azure webapp: Stack settings 答案是“在初始 Web 应用程序创建后,不再需要识别应用程序是 .NET Core 应用程序,因为 .NET Core 位已经安装在底层工作人员上”。这也意味着,因为它是 Windows,所以它可以正常工作。

两者似乎都与此 Microsoft 参考相矛盾:https://docs.microsoft.com/en-us/dotnet/standard/net-standard

据此,.Net Core 3.0 不兼容任何版本的 .Net Framework。更正式地说,.Net Standard 2.1 包含在 .Net Core 3.0 中,但没有 .Net 框架版本。然而,在 Azure 中,我的应用服务确实有效。

问题:它起作用的原因是因为虽然我已将 .Net Core 3.0 指定为 Visual Studio 中的目标,但我实际上并没有使用任何特定于 .Net Core 3.0 的代码,因此,我很幸运它有效? (IOW,如果我要做一些特定于 .Net Core 3.0 的事情,它会因为运行时堆栈不再支持而中断?)

【问题讨论】:

我也注意到了这一点。我认为问题只是 Azure UI 尚未更新以支持选择 Core,但实际后端完全支持 Core。 确实是的 - 我想知道这是 GUI 错误还是过时。如果在 GUI 中更改堆栈,不变的是: a) 部署 json; b) 'dotnet --info' 的输出和 c) web.config。因此,我想知道 GUI 选项实际上有什么不同。 我的猜测是该设置与核心应用程序无关,他们只是还没有弄清楚如何在 UI 中表示它。 我不这么认为。我已经测试了你描述的内容。并搜索相关文档,找到一个帖子告诉我,~~.Net 4.7 是.Net Framework 的新版本,它也支持.Net Standard 1.6,所以它可以与.Net Core 应用程序交互。~ ~ @Ian Kemp - 是的,这就是我的想法:如果它针对 Core 3.0,它将适用于所有平台,从而使 Stack 设置过时。 【参考方案1】:

之所以起作用,是因为 Azure 应用服务是使用 .NET Framework 作为 Windows 操作系统的一部分部署的,并安装了 .NET Core SDK 和运行时。您可以创建一个基本的 Windows 应用服务计划,创建一个与该计划绑定的 Web 应用并在 kudu 控制台内运行dotnet --info。这与在本地 Windows 开发盒上安装 .NET Core SDK 和运行时完全相同。此外,我们正在努力在 Windows 应用服务上获取 .NET 3.x SDK 和运行时。如果您需要这些二进制文件,可以使用 Azure Pipelines 安装这些 SDK。

因此,您可以将堆栈选项视为一种指导检查,让您知道应用服务上有哪些框架可用,而无需推送框架依赖项。例如,如果 .NET Core 3.0 可用,那么您可以推送依赖于 .NET Core 3.0 应用程序框架而不是自包含的。如果它不存在,那么您知道对于您计划应用程序所在的那个区域,您必须发布为自包含的,因为该框架尚未推出。

你很幸运,因为.NET Core rollout started 2019 Q4。如果您的 csproj 以 3.1 为目标,我敢打赌您不会那么幸运 :) 3.1 已于 2020 年 4 月 8 日部署到美国中北部和西部 2。

【讨论】:

谢谢瑞恩,但这重复了 OP 中的两个“答案”,都说“别担心 - 你需要的所有东西都已经存在”。但是,GUI 说我将使用 Framework 4.7,它为我提供了其他选项,这意味着如果我选择一个选项,我就不会得到其他选项。我认为您所说的是我实际上可以忽略 Framework 4.7 选项,因为“相信我,它会起作用”。如果是这样,我认为 Ian Kemp 的回答实际上是正确的:“该设置根本与 Core 应用程序无关,他们只是还没有弄清楚如何在 UI 中表示这一点”。 感谢@Mark 的反馈,我已经修改了答案。 太棒了,@Ryan Hill - 这就是我正在寻找的确认。非常感谢。标记

以上是关于.Net Core 3.x 与 .Net Framework 4.7 的兼容性的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core 3.x Api开发笔记 -- 输入参数模型验证

在 Rider 中反编译 ASP.NET Core 3.x 源

在 ASP.NET Core 3.x Endpoints 路由中,如何指定域名?

使用ASP.NET Core 3.x 构建 RESTful API P11 P12 ActionResult of T 以及 AutoMapper.md

.NET CORE学习系列 ——.NET Core是什么?与.NET FrameworkMono之间的关系 ?

NET Core 以及与 .NET Framework