查看: 123|回复: 3

.Net 运行时如何选择?

[复制链接]

4

主题

11

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2022-12-31 19:06:28 | 显示全部楼层 |阅读模式
首先,列举一些带有 .Net 的关键词:

  • .Net
  • .Net Framework
  • .Net Core
  • .Net Standard
.NET 应用是针对一个或多个.NET 实现开发的。 .NET 实现包括 .NET Framework、.NET 5(和 .NET Core)以及 Mono。[1]
需要做一个补充:UWP(通用 Windows 平台)也是 .Net 的一种实现,鉴于 Win Mobile, Win IoT 的现状,这个实现不推荐采用也不讨论,除非你发布在上述几个平台上。
<hr/>从上面的官方概述,不难看出主流的 .Net 实现有 .Net Framework、.Net 5+(包括 .Net Core)和 Mono,同时 .Net 5+ 实际是 .Net Core 的后续。
那么 .Net 到底是什么?

.Net 就是一个平台,一个多种 .Net 实现围绕的开放源代码(open source)、构建多种类型高性能应用程序的平台,而这些实现都基于 .Net 平台的中间语言(IL)标准、基础类库(BCL)等等。
.Net Standard 是什么?

而 .Net Standard 就是使这些基于相同 IL 标准的类库运行在不同 .Net 实现的一个标准,不是一个实现。
只有当你需要编写一个跨多种实现的类库才需要以它为目标。
.Net Framework是什么?

.NET Framework 是管理面向 .NET Framework 的应用的运行时执行环境。 它包括公共语言运行时(提供内存管理和其他系统服务)和一个全面的类库(使程序员能利用强大可靠的代码实现所有主要领域的应用开发)。[2]
不得不说,第一句话简直就是句车轱辘话,听君一言如听微软一言。
用我的理解来说,.Net Framework 是运行在 Windows Desktop系列(Win XP、Vista、7、8、8.1、10、11等)和 Server 系列上使用 Windows 系统环境提供了一个仅能在 Win 上使用的强大且全面的类库的执行环境+运行时。所以,.Net Framework 不能跨平台,并且在比较新的 Win (Vista 及以上)系统上被自带。比如 Vista 自带 Framework 3.0,Win 7 自带 3.5,Win 8 自带 4.5。
所以,当你需要面向 Windows 专属的系统环境开发时,你可以选择 .Net Framework。这会有一个好处,不必为客户机安装运行时环境。
但是,有几点需要注意:

  • 不同系统可能安装不同的运行时环境,你需要注意版本控制;
  • XP 不自带 .Net Framework;
  • 限于系统环境不同,能安装的版本也不同;
  • XP 最高只能安装 4.0,除此外可以安装 3.0 和 3.5(指 .Net Framework);
  • Vista 最高只能安装 4.6,其他系统同理;
  • XP 可能会有一些精简版之类的东西,删减了一些系统环境,导致 Framework 无法安装;
  • Framework 2.0、3.0 和 3.5 以及 4.0+ 可以一同安装,但是 4.0+只能安装一个且只能后向升级(向前兼容)。


  • 如果你需要为 XP 开发 Framework 程序,以 3.5 和 4.0 都不错,但是最好还是让客户升级操作系统,见上述第6点。
  • 如果需要兼容 XP 以后的系统,以 4.5 和 4.6 为目标都不错(Vista)。不要盲目升级,这可能会导致 Vista 和 7 上不可用,至于详情见官方文档 .NET Framework 系统要求 - .NET Framework | Microsoft Learn。
不用考虑 XP,使用 .Net Framework 会很轻松。另外,.Net Framework 4 还支持 IA64 平台。所以说,.Net Framework 也是跨平台的,跨 Windows 平台而已。
Mono 是什么?

Mono 是主要在需要小型运行时使用的 .NET 实现。 它是在 Android、macOS、iOS、tvOS 和 watchOS 上驱动 Xamarin 应用程序的运行时,且主要针对小内存占用。 Mono 还支持使用 Unity 引擎生成的游戏。[1]
当你需要在以上平台,发布 Xamarin 应用程序时,不得不使用该运行时。
.Net 5+(和 .Net Core)是什么?

这好像,与开头的问题有些混淆。但是,这也正传达 .Net 5+的雄心壮志:成为统一 .Net 平台的核心(Core),支持 Win、MacOS 和 Linux,ASP.NET Core、Windows 窗体和Windows Presentation Foundation (WPF)都在 .NET 5+ 上运行[1],同时未来,Unity 也将使用 .Net 5+ 作为 CLR。
在命名上,.Net Core 3.1 的继承者 .Net 5 去掉了 Core 一词,并在 .Net Framework 4 的版本号上 +1,表示已经一统 .Net Core 和 .Net Framework。
搞清 .Net 5+ 是什么,就得先搞清:
.Net Core 是什么?

一种跨平台、高性能的开放源 .NET 实现。 也称为 .NET 5+。 包括公共语言运行时 (CLR)、AOT运行时(正在开发中的CoreRT)、基类库 (BCL) 以及.NET SDK。[3]
.Net Core 是什么,在官方文档中是见 .Net 5+。所以很明显,.Net Core 是一种跨平台、高性能的开放源(open source).NET 实现,包括 CLR、AOT(未完成)、BCL 以及.NET Core SDK。换句话说,Core 与 .Net 5+ 区别不大,主要在外围功能上存在落后(BCL等API)。而相对 .Net Framework,则存在明显差异,例如与 Win 系统环境强关联的 API 不受支持,原本集成在 Framework 当中的强大的外围功能被剥离出去(需要引入新的程序集才能使用,例如 http://Ado.Net),Winform 和 WPF 不受支持等。
所以 .Net Core 最主要的就是其跨平台、高性能的运行时——CoreCLR,.Net 5+ 是 .Net Core 的完美升级对象。同时年底最后一个 Core 版本 3.1 也将停止支持。因此不推荐使用 .Net Core 作为构建目标。
.Net 5+ 是什么?

.Net 5+ 是 Core 的升级版本,其在外围功能上得到了一些完美升级,例如支持作为 Winform 和 WPF 应用程序的运行时,Asp.Net Core 的一些功能增强等,和在性能上持续不断的加强以及 AOT 支持的不断完善。
目前,最新的 .Net 5+版本为 .Net 6,该版本也为长期支持版本(LTS)。所以,当你以较新版本的 Windows (7 及以后)、MacOS 和 Linux 为目标生成 .Net 程序时,.Net 6 是最佳的选择。
而你只需要面向较新版本的 Windows 开发 Winform 或 WPF 程序的话,则需要与 .Net Framework 4 之间综合考虑,一下有几点值得注意:

  • .Net Framework 被自带于操作系统当中,免去安装烦恼;
  • .Net 5+ 可以将运行时随附打包,但会增加打包大小(10M至100M不等);
  • 使用 .Net Standard 在两者之间共享代码,可以为后续迁移减少工作量;
  • .Net 5+ 性能更优,而 Framework 也随着 .Net 5+ 的性能增强而得到升级改进,但目前仅限于 20H2 及之后版本的 Win 10/11;
  • .Net 5+ 的平台语言(C#、F#)特性的不断增强,可以获得更多在开发上的优势;
  • .Net 5+ 不断完善的 AOT 支持,在冷启动、反编译上有一定优势。

结论


  • 兼容 XP 的 .Net 程序,推荐使用 .Net Framework 4.0,但实际上更应该升级操作系统。
  • 尽量兼容更多版本 Windows 的 .Net 程序,如使用 Winform 或 WPF 技术开发运行在 Windows 7 的上位机程序,使用 .Net Framework 4 会比较合适。
  • 为一般消费者用户开发的桌面程序,包括使用 Winform、WPF 和 WebView 2 Runtime 以及 MAUI 等新式技术的应用程序,推荐使用 .Net 6 或更新的 LTS 版本。
  • 跨操作系统平台运行的 .Net 程序,应当使用 .Net 6 或更新的 LTS 版本。
  • 多平台发布的类库(DLL),应当使用 .Net 6 或更新的 LTS 版本,以 AOT 发布。
  • 使用 .Net Standard 可以在 Framework、Mono 和 .Net 5+ 之间共享代码,对新式程序使用多目标生成,可以兼顾不同实现的优点。
  • 发布 Xamarin 程序时,不得不使用 Mono。

阅读官方文档,笔者也发现了很有趣的东西:
Core CLR 最初是 Silverlight 的运行时,并且设计为在多个平台上运行,尤其是在 Windows 和 OS X 上运行。[3]

最后,关于 Unity3D 的 C# 插件开发,官方推荐将 .Net Standard 2.0 作为生成目标。[4]
参考


  • ^abc.Net实现-微软文档 https://learn.microsoft.com/zh-cn/dotnet/fundamentals/implementations
  • ^.Net Framework 概述-微软文档 https://learn.microsoft.com/zh-cn/dotnet/framework/get-started/
  • ^ab.Net 术语表-微软文档 https://learn.microsoft.com/zh-cn/dotnet/standard/glossary#net-5-and-later-versions
  • ^Unity 中的 .NET 概述 https://docs.unity.cn/cn/2021.1/Manual/overview-of-dot-net-in-unity.html
回复

使用道具 举报

1

主题

4

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2022-12-31 19:07:07 | 显示全部楼层
终于知道.net那一堆东西是啥了[思考]我还以为core到3.1就没了呢,原来跑去.net5+了
回复

使用道具 举报

4

主题

12

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2022-12-31 19:07:26 | 显示全部楼层
现在最新的稳定版是.net 6,预览版的.net7也已经有了
回复

使用道具 举报

4

主题

9

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2022-12-31 19:07:55 | 显示全部楼层
看来大家还是对 .Net 的新技术还是比较了解的,简单说下.Net 7已经RC2了,预定是在下个月8-10日的conf大会上发布正式版,该版本新增一些增强开发的特性,比如C#11和静态抽象接口以及泛型数字运行方法等。如果开发个人工具推荐尝鲜哦。另外 .Net 的路线图,目前是下一年差不多这个时间发布 LTS 的 .Net 8 哦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表