适用于服务器应用的 .NET 与 .NET Framework

有两种支持的 .NET 实现可用于生成服务器端应用:.NET 和 .NET Framework。 最新的 .NET 版本(当前为 .NET 8)是用于服务器开发的首选 .NET 版本。 用户只会出于具体且有限的原因而继续使用 .NET Framework。

实现 包含的版本
.NET .NET Core 1.0 - 3.1
.NET 5 及更高版本
.NET Framework .NET Framework 1.0 - 4.8

选择 .NET

.NET 对于服务器应用具有以下优势:

  • 跨平台工作

    .NET 使 Web 或服务应用能够在多个平台(例如 Windows、Linux 和 macOS)上运行。 你还可以使用其中任何一种操作系统作为开发工作站。 在 Windows 上使用 Visual Studio 集成开发环境 (IDE),或者在 macOS、Linux 或 Windows 上使用 Visual Studio Code。 Visual Studio Code 支持 IntelliSense 和调试。 大多数第三方编辑器(如 Sublime、Emacs 和 VI)都可搭配 .NET 使用。 这些第三方编辑器可使用 Omnisharp 获取编辑器 IntelliSense。 你还可以跳过代码编辑器并直接使用 .NET CLI

  • 允许以微服务为目标

    微服务体系结构允许跨服务边界组合使用技术。 通过这种技术组合,可逐步接受 .NET 作为能与其他微服务或服务搭配使用的新微服务。 例如,可组合使用微服务或使用 .NET Framework、Java、Ruby 或其他单片技术开发的服务。

    可用的基础结构平台有很多。 Azure Service Fabric,设计用于大型和复杂微服务系统 。 Azure App Service,很适合用于无状态微服务。 如下一部分(“支持 Docker 容器”)中所述,基于 Docker 的微服务备选方案适合任何微服务方法。 所有这些平台都支持 .NET,是托管微服务的理想选择。

    有关微服务体系结构的详细信息,请参阅 .NET 微服务:容器化 .NET 应用的体系结构

  • 支持 Docker 容器

    容器通常与微服务体系结构结合使用。 还可使用容器将遵循任何体系结构模式的 Web 应用或服务容器化。 虽然可以在 Windows 容器上使用 .NET Framework,但 .NET 的模块化和轻型性质使之成为容器的更佳选择。 在创建和部署容器时,使用 .NET 时容器的映像大小要远小于使用 .NET Framework 时的大小。 因为它是跨平台的,所以可将服务器应用部署到 Linux Docker 容器。

    你可以将 Docker 容器托管在自己的 Linux 或 Windows 基础结构中,或托管在 Azure Kubernetes 服务等云服务中。 Azure Kubernetes 服务可管理、协调和缩放云中基于容器的应用程序。

  • 高性能且可缩放

    如果系统需要最佳的性能和可伸缩性,.NET 和 ASP.NET Core 是最佳的选择。 Windows Server 和 Linux 的高性能服务器运行时使 ASP.NET Core 成为 TechEmpower 基准上性能最佳的 Web 框架。

    性能和可伸缩性对微服务体系结构尤为重要,微服务体系结构中可能正在运行数百个微服务。 借助 ASP.NET Core,可以大大减少用于运行系统的服务器或虚拟机 (VM) 数量,从而节省基础结构和托管成本。

  • 支持按应用程序并行安装 .NET 版本

    .NET 现支持在同一计算机上并行安装不同版本的 .NET 运行时。 该功能允许在同一台服务器上运行多个服务,每个服务使用自身的 .NET 版本。 这还可在应用程序升级和 IT 运营时降低风险、节省成本。

    .NET Framework 不支持并行安装。 它是一个 Windows 组件,一台计算机上只能存在一个版本:每个 .NET Framework 版本会替换前一版本。 如果安装面向 .NET Framework 更高版本的新应用,则可能会中断计算机上运行的现有应用,因为替换了之前的版本。

  • 更安全

选择 .NET Framework 的情形

如前所述,.NET 实现为新应用程序和应用程序模式提供显著的优势。 但是,在某些特定场景中,你可能需要为服务器应用使用 .NET Framework,并且 .NET Framework 将继续受支持。 对于以下情况,请为服务器应用使用 .NET Framework:

  • 应用当前使用 .NET Framework。

    在大多数情况下,不需要将现有应用程序迁移到 .NET。 若要扩展现有的应用(例如,在 ASP.NET Core 中写入新的 Web 服务),我们建议改用 .NET。

  • 应用使用不可用于 .NET 的第三方库或 NuGet 包。

    使用 .NET Standard 可跨各种 .NET 实现(包括 .NET 6+)共享代码。 使用 .NET Standard 2.0,兼容性模式允许 .NET Standard 和 .NET 项目引用 .NET Framework 库。 有关详细信息,请参阅对 .NET Framework 库的支持

    仅当库或 NuGet 包使用不可用于 .NET Standard 或 .NET 的技术时,才应使用 .NET Framework。

  • 应用使用不可用于 .NET 的 .NET Framework 技术。

    某些 .NET Framework 技术在 .NET 中不可用。 以下列表显示无法在 .NET 中找到的最常见技术:

    • ASP.NET Web Forms 应用程序:ASP.NET Web Forms 仅在 .NET Framework 中可用。 ASP.NET Core 不能用于 ASP.NET Web Forms。
    • ASP.NET Web 网页应用程序:ASP.NET 网页未包含在 ASP.NET Core 中。
    • 工作流相关的服务:Windows Workflow Foundation (WF)、工作流服务(WCF + 单个服务中的 WF)和 WCF Data Services(以前称为“ADO.NET Data Services”)仅在 .NET Framework 上可用。
    • 语言支持:.NET 支持 Visual Basic 和 F#,但并非所有项目类型都支持它们。 有关支持的项目模板列表,请参阅 dotnet new 的模板选项

    有关详细信息,请参阅在 .NET 中不可用的 .NET Framework 技术

  • 应用使用不支持 .NET 的平台。

    某些 Microsoft 或第三方平台不支持 .NET。 某些 Azure 服务提供尚不可用于 .NET 的 SDK。 在这种情况下,可使用等效的 REST API(而不是客户端 SDK)。

请参阅