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工具使用。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。