0.1 .NET Core的重要性
为了理解.NET Core的重要性,就一定要考虑.NET Framework。.NET Framework 1.0在2002年发布,此后大约每两年就推出一个新的主要版本。Visual Studio 2013附带着C# 5和.NET 4.5。.NET Framework 4.5十分巨大,有20000多个类。
注意:第1章详细介绍了.NET Framework和C#的版本。
这个巨大的框架有什么问题?.NET Core是如何解决的?
对于新的开发人员来说,掌握这个巨大的框架并不容易。其中保留了旧应用程序很重要的许多内容,但它们对新的应用程序并不重要。对于有经验的开发人员来说,在这些技术中选择一个最好的是不容易的。必须为Web应用程序选择使用ASP.NET Web Forms还是ASP.NET MVC,为客户端应用程序选择使用Windows Forms和WPF还是Universal Windows Platform,为数据访问选择Entity Framework还是LINQ to SQL,为存储集合选择使用Array List还是List<T>。这对于一些有经验的开发人员而言,选择是显而易见的,但对于大多数开发人员来说,选择并不是那么容易。刚开始接触.NET的开发人员就更困难了。
.NET Core基于较小的单元——小型NuGet包。Console类只用于控制台应用程序。在.NET Framework中,Console类可用于mscorlib, mscorlib是每个.NET应用程序都引用的程序集。使用.NET Core,必须显式地决定使用NuGet包System.Console;否则,Console类就不可用。
较小的包更容易摆脱框架的某些部分。如果需要给遗留应用程序使用旧的集合类,它们就可以通过NuGet包System.Collections.NonGeneric来使用。对于新的应用程序,可以定义能使用的软件包列表,System.Collections.NonGeneric可以排除在这个列表之外。
如今,开发要快得多。在许多产品中,客户会收到产品的持续更新,而不是每两年接收一次新版本。甚至Windows 10都具备这么快的步伐。客户在每次更新时都收到较小的新特性,但收到新特性的速度更快。.NET Framework目前的发布周期是两年,还不够快。一些技术,如Entity Framework,已经绕过了这个问题,它可以通过NuGet包提供新功能,而NuGet包可以独立于.NET Framework来发布。
更新较小的包,就允许更快的创新。.NET Core基于许多小型NuGet包,所以更容易改变。.NET Core和ASP.NET现在是开源的。.NET Core的源代码在http://www.github.com/dotnet上,ASP.NET的源代码在http://www.github.com/aspnet上。
发布.NET时,Windows在客户端和服务器上都有很大的市场份额。现在,世界更加碎片化。许多公司决定不通过ASP.NET运行服务器端代码,因为它不在Linux上运行。而ASP.NET Core 1.0和.NET Core可以在Linux上运行。
.NET Core独立于平台,支持Windows、Linux和Mac系统。对于客户端应用程序,可以在iPhone和Android上使用.NET和Xamarin。
.NET Framework要求把开发过程中使用的.NET运行库版本安装到目标系统上。基于客户需求,许多应用程序的开发都受到要使用的.NET Framework版本的限制。这不仅是基于客户端的应用程序开发的问题,也是基于服务器的应用程序开发的问题。我们不得不转回旧的.NET运行库版本,因为供应商不支持最新的版本。而有了.NET Core,运行库会和应用程序一起交付给客户。
建立ASP.NET时,与Active Server Pages(ASP,使用运行在服务器上的JavaScript或VBScript代码建立)的兼容是一个重要的方面。现在不再需要了。建立ASP.NET Web Forms时,开发人员不需要知道任何关于JavaScript和HTML的内容,一切都可以用服务器端代码完成。现在,因为有了大量的JavaScript框架和HTML的增强,所以需要对JavaScript和HTML进行更多的控制。
在新版本的ASP.NET中,性能在框架体系结构中有很大的作用。只有真正需要的东西才施加性能影响。如果Web应用程序没有静态文件,就必须显式地决定是否使用它,否则就不会对它有性能影响。通过细粒度的控制,可以决定需要什么特性。
为了得到更大的性能提升,.NET Core可以构建为本地代码。这不仅在Windows上是可能的,在Linux和Mac系统上也是可行的。这样,在程序启动时可以得到特别的性能改进,而且使用更少的内存。
现在,遗留的应用程序有一个问题。大多数应用程序都不能轻松地切换到.NET Core上。完整的.NET Framework(仅运行在Windows上)也在进化。它进化的步伐没有.NET Core那么大,因为它是一个成熟的框架。在撰写本书时,发布了.NET 4.6.1,与之前的版本相比,其更新比较小。使用Windows Forms或ASP.NET Web Forms编写的应用程序仍然需要使用完整的框架,但它们可以利用.NET 4.6.1的增强功能。通过.NET 4.6.1,还可以使用为.NET Core建立的NuGet包。许多新的NuGet包采用便携的方式建立。通过ASP.NET MVC 5 Web应用程序,还可以决定改为运行在ASP.NET Core 1.0上的ASP.NET MVC 6。ASP.NET Core 1.0允许使用.NET Core或.NET 4.6。这可以简化转换过程。然而,要在Linux上运行ASP.NET MVC,则需要迁移ASP.NET MVC应用程序来使用.NET Core,但之前也不能在Linux上运行。
下面总结.NET Core的一些特性:
● .NET Core是开源的。
● NuGet包较小,允许更快的创新。
● .NET Core支持多个平台。
● .NET Core可以编译为本地代码。
● ASP.NET可以在Windows和Linux上运行。
从.NET Core的特性可以看出,自.NET第1版以来,这个技术在.NET历史上给.NET带来的变化最大。这是一个新的开始,我们可以用更快的步伐继续新的开发旅程。