厚积薄发,拥抱.NET 2016


初识 .NET 2016

.NET 2016 概览

.NET 2016 作为 .NET 技术最新发展,如下图所示,它主要包含三大块

最左边代表的是 .NET Framework 4.6,WPF、ASP.NET 4.x、ASP.NET Core 1.0 能运行在它上。中间这部分代表的是 .NET Core 技术,ASP.NET Core 1.0 和 Universal Windows Platform(UWP)能运行在它之上。当然,你也可以创建控制台应用程序运行在.NET Core 上。最右边是 Xamarin,它是一个基于 Mono 的跨平台移动开发框架。

在.NET 2015 时,微软为我们带来了全新的 .NET,它就是.NET Core。.NET Core 的一个重要组成部分是新的运行时(Runtime):CoreCLR。除了使用 CoreCLR 运行时外,.NET 也能被编译成 Native Code。UWP 自动使用这个特性,应用程序在提交到 Windows Store 后被编译成 Native Code,最终生成优化过后的代码,可以让 APP 启动时间加快并可以减少内存消耗 。你当然也能编译其他.NET Core 应用程序成 Native Code,并在Linux运行。

在上图的底部,你可以看到有一些东西在.NET Framework 4.6、.NET Core、Xamarin 之间共享。比如一些共享的Libraries,通过 Nuget 包的概念将这些 Libraries 汇集在 Package 中供所有的.NET 平台使用。还有一些运行时组件(Runtime Components)被共享,如 GC 和 RyuJIT,这是一个新的JIT编译器,这个新的 JIT 编译器不仅比以前更快,在调试时它还具有更好的支持编辑和继续功能。这个功能可以在调试时编辑代码并继续调试,而不需要停止和重新启动进程。CLR、CoreCLR、.NET Native 使用 GC 进行实例的销毁以及内存的回收,并且 CLR 和 CoreCLR 使用 RyuJIT 编译器将 IL 代码编译成 Native Code 。当然,新的编译器 Roslyn 也是共享的。

.NET Framework 4.6

.NET Framework 4.6 作为 .NET Framework 的最新版本,在过去 10 多年间,不断被增强。我们利用这个 Framework 构建 Windows Form 、WPF、ASP.NET 4 等应用程序。尽管 ASP.NET Core 应用程序运行在.NET Core 上,但它也能运行在.NET Framework 4.6 上。

如果你想要继续使用 ASP.NET Web Form 开发应用程序,.那么 NET Framework 4.6 中的 ASP.NET 4.6 是你的最佳选择。值得注意的是你不能在.NET Core 上运行 ASP.NET Web Form 应用程序。

.NET Core 1.0

.NET Core 1.0(目前是 RC2),是新的.NET,相比于 Mono,它是真正意义上跨平台的实现。.NET Core 被设计成模块化的方法,即被分割成大量的 Nuget Package。在应用程序中,你决定需要哪些 Package,并且随时保持更新和卸载。而.NET Framework,它是操作系统的一部分,注定不能实时被更新,同时,过去 10 多年件,.NET Framework 加入非常多的新功能,它变得越来越大,更糟糕的是,它不可能移除不再需要的旧功能。比如旧的集合类不再被使用因为泛型集合类加入,.NET Remoting 被新的通信技术 WCF、ASP.NET Web API 替换,LINQ to Sql 被 EntityFramework 替换。而这些旧技术,一直存在.NET Framework 中,你不得不全盘接受他们。

Xamarin

Mono 是开源社区开发的跨平台.NET Framework,而 Xamarin 是一个构建于 Mono 上跨平台移动应用开发框架。相信微软收购了 Xamarin 之后,Mono 将得到大力支持,.NET Core 在移动端的表现拭目以待。

使用 .NET Framework 4.6 编译应用程序

创建 “Hello World” 应用程序是学习一门新技术的开篇。在这儿,为了更好的去理解.NET Core,我们不打算去使用Visual Studio 2015 进行开发。

Developer Command Prompt 编译代码

当安装完毕 Visual Studio 后,我们可以通过配套工具 Developer Command Prompt 使用 C# 编译器编译代码。

1.打开记事本,使用 C# 编写如下代码,命名为 HelloWorldApp.cs 并保存至 C:\Code 文件夹

https://github.com/dotnet/corefx/issues/8453) 中,也应证了我的观点。暂时的解决方法是将dependencies 节点 移入到frameworks 下的 netcoreapp1.0 中:

{
 "version": "1.0.0-*",
 "buildOptions": {
 "emitEntryPoint": true
 },
 "frameworks": {
 "netcoreapp1.0": {
 "imports": "dnxcore50",
 "dependencies": {
 "Microsoft.NETCore.App": {
  "type": "platform",
  "version": "1.0.0-rc2-3002702"
 }
 }
 },
 "net46":{}
 }
}

dotnet build 之后,分别生成两个文件夹 net46 和 netcoreapp1.0,使用 ILDasm(见上一小节)工具,打开文件夹可以看到他们之间一个很重要的区别,使用.NET Framework 的应用程序编译之后为生成包含 IL 的 EXE 应用程序并且依赖mscorlib程序集 ,而使用.NET Core 的应用程序编译之后生成包含 IL 的DLL,依赖System.Console 和 System.Runtime 程序集。

最后,通过 dotnet run --framework net46 指定 famework 的版本为.NET Framework 4.6 查看运行结果。

除了 dotnet build 和 dotnet run 外,你还可以通过 CLI 打包(dotnet pack)和 发布(dotnet publish)应用程序。

dotnet pack 创建了一个 NuGet Package:

它是一个后缀名为 nupkg 的 Nuget Package,你可以将它改为.zip,解压查看里面的内容。

dotnet publish 发布一个可用于部署.NET 项目,你可以在 project.json 添加 runtime :

"runtimes" : {
 "ubuntu.14.04-x64": { },
 "win7-x64": { },
 "win10-x64": { },
 "osx.10.10-x64": { },
 "osx.10.11-x64": { }
}

然后使用 dotnet restore 下载指定的 runtimes。当跨平台发布时,通过参数 -r 指定 runtime,比如 dotnet publish -r ubuntu.14.04-x64,最后将发布之后的文件夹(ubuntu.14.04-x64/publish)拷贝到指定 OS 就可以执行,无需安装 .NET Core 和 .NET Core SDK,只需安装.NET Core 依赖的 Libraries 即可。

小结

告别.NET 开发一年多,没想到发生了这么多不可思议的技术,抓紧时间补充一下。我招过人,也求过职,深切体会到国内.NET 的生态环境不给力,希望.NET Core 的出现能为我们指向一条明路,就像森林里一缕阳光,带来希望。

本文为木宛城主原创。
原文地址:http://www.cnblogs.com/OceanEyes/p/dotnet_2016_overview.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持phpstudy。


« 
» 

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3