适用于服务器应用的 .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)。