ASP.NET vNext总结:CLR
1.前言
1.1感慨
2015年来了,园子里多了一些《年总结》类的帖子,颇有感触。俺没啥文化,出来打工10年了,人生能有几个10年?命长的话,活个70岁古来稀就知足了。期间换三个职业,N家单位吧,如今真正选择做一名程序员,也有一年时间了。我也不想提及为何成了苦逼的程序员?反正我必须承认这些年来混得挺失败的。
不管是工作上写过年终结,职业规划,就连人生也写过感悟,生活理想。可事实上,写过又能怎样?人的成长是不断变化的,过去的想法,在下一时期,可能又不认同了。还有计划跟不上变化的,这看似是在为没有实现的愿望找借口。可是每一个努力过的人,也不一定成功!这找谁说理去?这么说,不是说写总结,做计划没有必要。不打无准备的仗,吃一堑长一智。甭管有没有用,写了,想了,总结了,做了,万一实现呢?
每一个人都不可能把所有想学的知识都装在脑袋里,何况还会有记忆力衰退遗忘发生,所以我们学习技术,一样也要善于总结。过去人常说好记性不如烂笔头,说的也是这个道理。再说写写帖子,也能锻炼自己文字表达能力。
1.2技术趋势
2014年微软出了ASP.NET vNext技术,vNext直译”下一代(开发/应用)技术“,正式版可能叫ASP.NET 5 ,但vNext已经成为术语了。它是微软又变个啥花样呢?我的看法,确实颠覆很大吧。首先产品市场策略上来说,微软终于开放了一些源码(开源),也重视了跨平台,更以移动和云服务为先战略。再从技术的角度来说,一是顾及和优化原有的开发技术,又要适应新的应用技术。
我这一年来,成为微软技术的粉丝,直接学习vNext新技术是不是过于超前了?答案怎么说呢?反正以前的东东也没有深入了解,无从比较。至于VS2015正式版什么时候出?一是应该很快吧;二是现在就了解它,等它硬火起来了,正好走在一些人前面了。作为销售或管理者,他们一般认为技术选哪种,是否新技术并不重要,而作为苦逼的程序员就不要和他们争论的技术选择重要性。职业角色不同吧,每人专注掌握自己的领域即可。
2.项目创建及关注点
2.1项目创建
为了介绍和演示,先创建一个项目。打开VS2015:文件-》新建-》项目-》模板-》Visual C#-》Web:ASP.NET Web应用程序-》ASP.NET 5 Empty。 项目”名称“:vNext.WebEmptyTemplate;解决方案名称:vNext。
2.2References目录
注:看到ASP.NET 5.0和ASP.NET Core 5.0区别没?
2.3项目依赖配置
打开project.json看依赖配置:
2.4KRE
右键项目”属性“-》Application:
注: KRE是可以通过KVM(后面系列文章会介绍它的)命令来安装更多的版本,在系统用户文件下也可以找到安装过的KRE,如:
3.CLR版本
3.1概述
为了优化和云平台,甚至跨平台,DotNetFramework版本进行了重新设计,划分了多个版本,在应用程序中它们可以共存,你也可以单一使用某一个版本。
3.2CLR
公共语言运行库(Common Language Runtime),它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。CLR也可翻译成公共语言运行时。
3.3完整CLR
它是在 VS创建项目的默认运行时。提供了整个 API 集,保持了向后兼容性。
3.4核心CLR
它 是 ASP.NET 5 项目精简和分成模块化的运行时。通过重新分解为单独的组件运行时,也便于单独更新或加载某一个模块。
它大约 11 兆字节而不是完整的CLR 大约 200 兆字节。核心 CLR 对云优化特别易用又性能最好。
3.5跨平台CLR
微软还将完善发布一些跨平台运行时为 Linux 和 Mac OS X。此运行时将使您能够开发和运行.NET 应用程序在 Mac 和 Linux 的设备上。
4.实例演示
4.1修改Startup.cs代码
using System; using Microsoft.AspNet.Builder; using Microsoft.AspNet.Http; namespace vNext.WebEmptyTemplate { public class Startup { public void Configure(IApplicationBuilder app) { app.Run(async context => { await context.Response.WriteAsync(DateTime.Now.ToString()); }); } } }
程序运行结果:
4.2安装NodaTime
打开VS,工具-》Nuget程序包管理器-》管理解决方案的Nuget程序包:
查看References目录:
project.json配置也自动修改了:
4.3使用NodaTime
把Startup.cs代码改为
此时运行程序会错,显然NodaTime这个dll不是aspnetcore50版本,我们把它在ASP.NET Core 5.0依赖中去掉,修改project.json(注释掉即可):
然后再看References:
另外它又只能是完整版CLR运行(和project.json配置有关系):
此时再运行程序结果:
注:和前面获取的时间格式不同。
4.4多版本CLR共存
难道不能多个DotNetFramework版本Debug同时共存吗?显然是可以的。
修改Startup.cs代码:
using System; using Microsoft.AspNet.Builder; using Microsoft.AspNet.Http; namespace vNext.WebEmptyTemplate { public class Startup { public void Configure(IApplicationBuilder app) { app.Run(async context => { #if ASPNET50 var time = NodaTime.SystemClock.Instance.Now.ToString(); #elif ASPNETCORE50 var time = DateTime.Now.ToString(); #endif await context.Response.WriteAsync(time); }); } } }
修改proiect.json配置:
这时References文件夹:
5.运行程序
5.1选择完整CLR:
运行程序结果:
5.2选择完整CLR:
运行程序结果:
6.小结
本章内容是介绍CLR的,别的总结,请留意本系列! 下一章介绍vs2015集成Bower工具使用。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。