C# 和 .NET Core 的关系

  • A+
所属分类:.NET技术
摘要

.NET 框架最初是在 2002 年发布的。从编程框架的角度来说,它已经很“成熟”了,几乎包含了所有重要的、人们想要的、在主流编程语言中目前可用的功能。但是,认为 .NET 已经步入了“老年阶段”是错误的,“中年”可能是更恰当的描述。毕竟,C 和 C++ 的存在时间远远超过了 C#。

一、.NET 框架的背景

.NET 框架最初是在 2002 年发布的。从编程框架的角度来说,它已经很“成熟”了,几乎包含了所有重要的、人们想要的、在主流编程语言中目前可用的功能。但是,认为 .NET 已经步入了“老年阶段”是错误的,“中年”可能是更恰当的描述。毕竟,C 和 C++ 的存在时间远远超过了 C#。

虽然 .NET 框架仍然是开发它设计之初用来创建的应用程序类型的绝佳选择,但在过去的 15 年中,计算机领域已经发生了很大的变化,我们将在下一节中进行描述。

二、为什么选择 .NET Core(和 Xamarin)

.NET 框架主要用于为运行 Windows 操作系统的计算机(包括服务器和客户端工作站)开发应用程序。在 .NET 被引入时,微软在个人电脑操作系统中占据主导地位,智能手机还需要数年时间才会诞生。然而,随着时间的推移,Unix 和 Apple 都成功地削减了微软在计算机领域的市场份额。此外,一个更为重要的发展是向移动设备的巨大转移,而微软在移动领域的份额(无论是硬件还是软件)甚至可以忽略不计。第三个主要趋势是基于 Web 的应用程序(而非基于桌面的应用程序)的份额增加。

这三种趋势降低了 Windws 桌面应用程序的重要性,而有利于 Web 和移动应用程序以及在 Windows 以外的操作系统上运行的桌面应用程序的发展。这绝不意味着 Windows 桌面应用程序很快就会消失,只是大多数人认为未来最大的增长将来自 Web 应用和移动应用。

基于此,微软得出结论,它可以用 .NET 框架的一个基于云的、跨平台的、开源衍生产品,更好地解决 Web 开发以及 Linux 或 macOS 计算机的开发。它将这个新框架称为 .NET Core。大约在同一时间,微软收购了 Xamarin 以解决 Android 和 IOS 等移动平台的开发问题。

你需要知道的是,无论是开发完整的 .NET 框架应用程序、.NET Core 应用程序还是 Xamarin 应用程序,你都可以使用 C# 语言。

C# 和 .NET Core 的关系

三、.NET Core 的目标

以下列表总结了 .NET Core 的主要目标:

  • 多平台支持
  • 快速开发和升级
  • 更小的应用程序占用空间
  • 更简单的部署
  • 更少的版本问题
  • 开源社区支持
  • 改进的应用程序性能
  • 全新的开始

四、多平台支持

自计算机时代开始以来,编程框架的圣杯一直是“次编写,到处运行”。尽管大多数新的努力似乎让我们更接近这个目标,但是即便是现在,这个目标仍然令人难以企及。.NET Core 允许开发人员创建在 Windows 上运行的应用程序,并且只需进行少量的修改就可在 Linux 和 macOS 上运行。在撰写本文时,有一些测试版的 .NET Core 能够在 ARM 处理器(例如 Raspberry Pi)上运行。

多平台支持还包括在 Windows 以外的操作系统上进行开发。Visual Studio Code 是微软创建的一个新的集成开发环境,可以在 Linux、macOS 和 Windows 上运行。

五、快速发展和升级

过去,软件通常每两到三年就会升级一次主版本。例如,Windows 95 之后是 Windows 98,然后是 Windows 2000。同样,Microsoft Office 2010 之后是 Microsoft Office 2013 和 Microsoft ffice 2016。在主版本之间,通常是一个或多个包含错误修复和小改进的服务包。

如今,用户希望能够加快改进速度。例如,电动汽车制造商特斯拉经常并且频繁地为其车辆中的软件提供在线升级。

.NET 框架的初始版本大部分是通过光盘进行分发的,再往前几年,主要的软件发布还需要使用大量的软盘。当互联网首次进人公众视野时,拨号速度通常为每秒 14.4 或 28.8 千比特。相比之下,今天,大多数软件都是通过互联网分发的,速度比之前快几百甚至几千倍。应用程序加入了检查服务器是否有可用更新的功能,并根据用户的偏好自动安装或提示用户选择安装时间。

应用程序通常以模块化方式设计,以便可以独立升级不同的组件,而无须更换整个应用程序。在这方面,.NET Core 是高度模块化的,可以通过 NuGet 包自动升级,如下一节所述。

六、程序占用空间小、部署简单、版本问题少

.NET Core 基于 NuGet 包进行分发。是提供某些功能单元的代码库。包存储在 NuGet Galley上,可以根据需要从中下载。开发人员可以决定他们创建的包的模块化程度。

相比之下,.NET 框架现在包含 20000 多个类,在任何开发工作站和每个应用程序用户的计算机上都必须完整安装。通过仅指定相关的包,.NET Core 应用程序的总占用空间可以比完整的 .NET 框架应用程序小得多。不可否认,每个客户端工作站(每个版本)只需安装一次 .NET 框架,但相比之下,该安装过程是相当漫长的。

此外,要求运行 .NET 框架应用程序的所有目标计算机必须与开发应用程序的计算机具有相同的 .NET 版本,但是如果出于某种原因,无法在目标计算机上升级 .NET 框架,则可能会出现问题。这可能是由权限、公司政策或其他因素造成的,就需要为特定用户或者使用早期 .NET 版本的用户重新编译该应用程序。

相比之下,.NET Core 应用程序不会受到同样的约束。.NET Core 框架可以与应用程序代码并行发布,因此永远不会发生版本冲突。在目标计算机上已存在 .NET Core 框架(版本也合适)的情况下,应用程序可以选择使用现有代码,从而进一步减少应用程序的安装占用空间。

此外,由于每个应用程序都可以拥有自己的 .NET Core 库副本,因此可以在同一台计算机上使用不同版本的 .NET Core 来并行运行多个 .NET Core 应用程序。这将允许在不同时间升级不同的应用程序,而无须同时升级所有的应用程序。

七、开源社区支持

一般认为开源软件的好处是成本更低、灵活性更高(包括可定制化)、自由度更大、安全性更高和责任性更强。

私有软件的源代码通常是一个严格保守的秘密。如果该软件包含错误或极端情况下的异常行为,那么该软件的用户无法知道软件内部是如何工作的。相比之下,任何拥有适当工具的人都可以看到开源软件(的源代码),以便了解可能导致错误或异常行为的原因。有了这些知识,开发人员可以修复错误或修改自己的与这部分代码交互的代码,从而避免不良后果。

当有数百甚至数千名开发人员可以在错误发现的第一时间就进行修复时,这些修复就可能会比私有软件更快。至少在理论上,这可以产生更安全和更稳定的代码。

开发人员也可以自由地修改或扩展开源软件。与私有软件相比,这给用户提供了更大的灵活性。此外,如果将这些修改或扩展反过来提供给项目,则其他用户也可以从中受益。

八、改进的应用程序性能

通过基于现有 .NET 框架创建一个新的框架,但又不放弃完整的 .NET 框架,微软能够解耦过时和遗留的东西,同时实现一个更适合当今环境的新框架结构。

.NET Core 1.0 于 2016 年 6 月发布,随后版本 1.1 于 2017 年 3 月发布,增加了对几个新的操作系统发行版的支持,增加了一些新的 API,还修复了一些错误。

版本 2.0 于 2017 年 8 月发布。此版本显著增加了 API 的数量,性能也有很大的改进。此版本还包括对 Visual Basic .NET 的支持。如你所见,.NET Core 的改进速度比 .NET框架快得多。

十一、.NET 框架的未来

虽然你刚刚阅读了这些内容,但没有必要担心 .NET 框架的命运。微软承诺 .NET 框架将继续发展,并将继续在 Windows 操作系统的当前和未来版本中得到支持。因此,它将继续在 Windows桌面应用程序的开发中发挥关键作用,特别是在企业领域。如前所述,.NET Core 的优势使其成为 Web (ASP.NET Core)和通用 Windows 平台应用程序开发的首选平台。同时,.NET Core 通常也是开发旨在 Linux 或 macOS 上运行的应用程序的最佳选择。

十二、Xamarin 的适用之处

Xamarin 是一个允许使用 C# 和 .NET 库开发原生 Android、IOS 和 Windows 应用程序的平台。在 PC 上,Xamarin 的开发是在 Visual Studio 上进行的(在启用附加功能之后)。在 Mac 上,开发是在 Xamarin Studio 的继任者 Visual Studio for Mac 上进行的。不管是什么 IDE,也不管目标平台是 Android、iOS 还是 Windows,开发语言都是 C#。因此,Xamarin 扩展了可将 C# 用作开发语言的范围。

2016 年,Xamarin 被微软收购,随后 Xamarin 和 Visual Studio 捆绑在了一起。 连 Visual Studio 的社区(免费)版也包括了 Xamarin。Xamarin SDK 现在已经是开源的了。微软将 Xamarin 称为“.NET 跨平台移动开发”。虽然从技术上讲,Xamarin 的功能远不止如此,但这超出了本文的范围。

(完)