有两种支持的 .NET 实现可用于生成服务器端应用:

  • .NET Framework
  • .NET Core/5+,包括 .NET Core、.NET 5 及更高版本。

这两者共用许多相同的组件,你可在它们之间共享代码。 但两者之间存在根本的差异,可根据需要实现的目标进行选择。 本文介绍了在何种情况下进行选择。

在以下情况,对服务器应用程序使用 .NET Core/5+:

  • 用户有跨平台需求。
  • 你正在以微服务为目标。
  • 你正在使用 Docker 容器。
  • 需要高性能和可扩展的系统。
  • 需按应用程序提供并行的 .NET 版本。

在以下情况,对服务器应用程序使用 .NET Framework :

  • 应用当前使用 .NET Framework(建议扩展而不是迁移)。
  • 应用使用不可用于 .NET Core/5+ 的第三方 .NET 库或 NuGet 包。
  • 应用使用不可用于 .NET Core/5+ 的 .NET Framework 技术。
  • 应用使用不支持 .NET Core/5+ 的平台。
选择 .NET Core/5+ 的情形
以下各部分更详细地说明了前面提到的选择 .NET Core/5+ 的原因。
  • 跨平台需求

  如果应用程序(Web/服务)需要在多个平台(Windows、Linux 和 macOS)上运行,请使用 .NET Core/.NET5+。

  .NET Core/.NET5+ 作为开发工作站支持前面提到的操作系统。 Visual Studio 提供了适用于 Windows 和 macOS 的集成开发环境 (IDE)。 还可使用运行于 macOS、Linux 和 Windows 上的 Visual Studio Code。 Visual Studio Code 支持 .NET Core/5+,包括 IntelliSense 和调试。 大多数第三方编辑器(如 Sublime、Emacs 和 VI)都可搭配 .NET Core/5+ 使用。 这些第三方编辑器可使用 Omnisharp 获取编辑器 IntelliSense。 也可不使用任何代码编辑器,直接使用适用于所有支持平台的 .NET CLI

  • 微服务体系结构

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

  可用的基础结构平台有很多。 Azure Service Fabric,设计用于大型和复杂微服务系统 。 Azure App Service,很适合用于无状态微服务。 基于 Docker 的微服务备选方案适合任何一种微服务方法,这部分内容将在容器部分进行说明。 所有这些平台都支持 .NET Core/5+,是托管微服务的理想选择。

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

  • 容器

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

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

  • 高性能和可扩展的系统

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

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

  • 按应用程序级别并行安装 .NET 版本

  若要安装含不同 .NET 版本上的依赖项的应用程序,建议使用 NET Core/.NET5+。 .NET 对该实现支持在同一计算机上并行安装不同版本的 .NET 运行时。 并行安装允许在同一服务器上使用多项服务,每项服务位于其相应的 .NET Core/.NET5+ 版本上。 这还可在应用程序升级和 IT 运营时降低风险、节省成本。

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

选择 .NET Framework 的情形
  .NET Core/.NET5+ 对新应用程序和应用程序模式特别有用。 但在很多现有方案中依然会自然而然地选择 .NET Framework,并且对于所有服务器应用程序来说.NET Framework 不会被 .NET Core/.NET5+ 代替。
  • 现有的 .NET Framework 应用程序

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

  • 不可用于 .NET Core/.NET5+ 的第三方库或 NuGet 包

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

  仅当库或 NuGet 包使用 .NET Standard 或 .NET Core/.NET5+ 中不提供的技术时,才需要使用 .NET Framework。

  • .NET Framework 技术不可用于 .NET Core/.NET5+

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

  • ASP.NET Web 窗体应用程序:ASP.NET Web 窗体仅在.NET Framework 中可用。 ASP.NET Core 不能用于 ASP.NET Web 窗体。

  • ASP.NET 网页应用程序:ASP.NET 网页未包含在 ASP.NET Core 中。

  • WCF 服务的实现。 虽然 WCF 客户端库可从 .NET Core/.NET5+ 使用 WCF 服务,但 WCF 服务器实现目前只在 .NET Framework 上可用。

  • 工作流相关的服务:Windows Workflow Foundation (WF)、工作流服务(WCF + 单个服务中的 WF)和 WCF Data Services(以前称为“ADO.NET Data Services”)仅在 .NET Framework 上可用。

  • 语言支持:.NET Core/.NET5+ 目前支持 Visual Basic 和 F#,但不是所有项目类型都支持。 有关支持的项目模板列表,请参阅 dotnet new 的模板选项

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

  • 平台不支持.NET Core/.NET5+

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


参考文献:

.NET平台系列23:.NET Core/.NET5/.NET6 和 .NET Framework 的选择建议的更多相关文章

  1. .NET平台系列22:.NET Core/.NET5/.NET6 对比 .NET Framework

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET平台系列2 .NET Framework 框架详解>与 <.NET平台系列7 .NET Core 体系结构 ...

  2. .NET 平台系列6 .NET Core 发展历程

    系列目录     [已更新最新开发文章,点击查看详细] 在我的上一篇博客<.NET平台系列5 .NET Core 简介>中主要介绍了.NETCore的基本情况,主要包括.NET跨平台的缘由 ...

  3. .NET平台系列5 .NET Core 简介

    系列目录     [已更新最新开发文章,点击查看详细] 自1995年互联网战略日以来最雄心勃勃的事业 -- 微软.NET战略, 2000年6月30日. 微软公司于2002年2月13日正式推出第一代.N ...

  4. .NET平台系列26:在 Windows 上安装 .NET Core/.NET5/.NET6

    系列目录     [已更新最新开发文章,点击查看详细] 本文介绍如何在 Windows 上安装 .NET. .NET 由运行时和 SDK 组成. 运行时用于运行 .NET 应用,应用可能包含也可能不包 ...

  5. .NET平台系列27:在 Linux 上安装 .NET Core/.NET5/.NET6

    系列目录     [已更新最新开发文章,点击查看详细] .NET 在不同的 Linux 发行版上可用. 大多数 Linux 平台和发行版每年都有一个主要版本,并提供用于安装 .NET 的包管理器. 本 ...

  6. .NET Core/.NET5/.NET6 开源项目汇总5:权限管理系统项目

    系列目录     [已更新最新开发文章,点击查看详细] 企业管理系统一般包含后台管理UI.组织机构管理.权限管理.日志.数据访问.表单.工作流等常用必备功能.下面收集的几款优秀开源的管理系统,值得大家 ...

  7. .NET Core/.NET5/.NET6 开源项目汇总6:框架与架构设计(DDD、云原生/微服务/容器/DevOps/CICD等)项目

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...

  8. .NET Core/.NET5/.NET6 开源项目汇总9:客户端跨平台UI框架

    系列目录     [已更新最新开发文章,点击查看详细] .NET Core 实现了跨平台,支持在 Windwos.Linux.macOS上开发与部署,但是也仅限于Web应用程序.对于Windows桌面 ...

  9. .NET Core/.NET5/.NET6 开源项目汇总10:实用工具

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...

随机推荐

  1. 神经网络与机器学习 笔记—支持向量机(SVM)(上)

    支持向量机(SVM)的主要思想: 给定训练样本,支持向量机建立一个超平面作为决策曲面,使得正例和反例之间的隔离边缘被最大化. 线性可分模式的最优超平面 训练样本{(xi,di)}^N i=1 ,其中x ...

  2. ListView 加载数据时 触摸报错

    问题起因: 在做一个从sd卡中加载数据显示在ListView中,由于数据可能比较多,考虑到用户体验,就使用AsyncTask来异步加载,数据一条一条的添加至ListView中. 开始数据比较少的时候, ...

  3. SQL注入,PreparedStatement和Statement

    代码区 还是一个工具类 代码: package cn.itcats.jdbc; import java.sql.Connection;import java.sql.DriverManager;imp ...

  4. 【opencv】VideoCapture打不开本地视频文件或者网络IP摄像头

    1.前提:成功打开本地USB摄像头 // 创建VideoCapture对象 VideoCapture vc = new VideoCapture(); // 可以成功打开本地USB摄像头 // 参数可 ...

  5. 算法转 Java 后端,2021秋招斩获腾讯、京东、百度等大厂 offer 面经分享!|JavaGuide|Guide哥

    这是一篇来自算法转Java后端的一位读者的投稿!文章主要分享了作者从迷茫崩溃到最终斩获腾讯.京东.百度等大厂 offer 的经历.文章内容很全面.真实,相信可以对正在准备面试的小伙伴有帮助! 看到公众 ...

  6. 有哪些适用于律师事务所的CRM系统?

    中国的经济发展和政治稳定给律师行业带来了巨大的空间.而互联网的发展也让律师事务所遍地开花.如何在大大小小的律所中脱颖而出,是每个律所都迫切需要解决的问题.为了让您的律师事务所在激烈的竞争中脱颖而出,今 ...

  7. Shell 脚本重启项目

    每次发打包好项目后都需要手动重启项目,写个Shell脚本一键重启项目 Shell 脚本 #!/bin/bash while getopts "n:p:" arg do case $ ...

  8. Envoy:经过envoy代理后获取客户端真实IP

    在envoy作为前端代理时,用户ip的获取很重要,一般获取ip的方式.都是通过Header中的 X-Forward-For. X-Real-IP或 Remote addr 等属性获取,但是如果确保En ...

  9. [转载]虚拟化之KVM配置

    虚拟化之KVM配置 2017-11-06 [TOC] 虚拟化:通过虚拟化工具把cpu,内存,硬盘等真实硬件资源给模拟成更少的虚拟硬件资源.进行虚拟化的好处是,最大限度的利用硬件资源.也是云计算的基础. ...

  10. CentOS 7 设置日期和时间 timedatectl

    CentOS 7 设置日期和时间 在CentOS 6版本,时间设置有date.hwclock命令,从CentOS 7开始,使用了一个新的命令timedatectl. timedatectl [root ...