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

Mar*_*ark 3 .net .net-core azure-web-app-service

我有一个面向 .Net Core 3.0 的 Visual Studio Azure 应用服务项目。当我将它部署到 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 中,我的应用服务确实有效。

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

Rya*_*SFT 5

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

在此处输入图片说明

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

您很幸运,因为.NET Core 的推出始于 2019 年第四季度。如果您的 csproj 以 3.1 为目标,我敢打赌您不会这么幸运:) 因为 3.1 已于 2020 年 4 月 8 日部署到美国中北部和西部 2。