1.引子
如题:ASP.NET 5是什么?KRE(CLR)为啥多版本了?KVM是来干神马的?KPM又做什么?K Commands又来晕啥?……哎!其实我也是稀里糊涂的,如有个人之见不对之处,还望你拍拍键盘留言指正!
2.ASP.NET 5
微软在2013年底接触和支持Xamarin后,这算是开源社区力量和呼声吧!在2014年微软终于决定开展跨平台及开源战略,这才出现了ASP.NET vNext,先从web应用开始,但到底走向如何?到达何种程度?开源简单,一句话的事,跨平台就难办了,这工作量可大着?所以暂且定义宏伟目标,又不确定的方向。所以定义为vNext,下一代(版本)技术。如今眼看下一代web项目也逐渐明确了,就正式命名为ASP.NET 5.
3. KRE
右键项目属性:
这是VS创建asp.net 5模板项目,安装的clr及coreclr。
在References目录:
在project.json配置:
注:如果在此配置去掉asp.net50,那么References下ASP.NET 5.0也会没有,项目属性 KRE列表也没了clr版本了。
问题来了:aspnet50和aspnetcore50到底啥区别? KRE为什么是多版本的?
借鉴田园里的蟋蟀翻译和探讨的《精彩 .NET 2015》中图:
你可以这样理解:
aspnet50是指.NET Framework4.6,它是完整版的CLR,VS创建项目的默认运行时。提供了整个 API 集,保持了向后兼容性。它不是为跨平台而生的(借用mono也可以),只支持Windows平台;
aspnetcore50是指.Net Core5,它有多种CoreCLR,它为跨平台而生的。也暂时包含windows版.Net Native(以后或许跨平台不需要mono) ,它是模块化的CLR,具体有哪些类库实现看开源的corefx(https://github.com/dotnet/corefx )。问题来了,它是不是从.NET Framework4.6分离出来的还是完全重写的? 我也求这个问题答案吧。
再引用一个图:
这个重点明白.NET Core也有BCL就是了,基础架构还是.NET Framework那一套方案。
注:这里就不提编译器和编译过程。
在创建ASP.NET5模板项目后,在操作系统下也会有安装过的CLR:
aspnet50支持的,而aspnetcore50不一定有,如:
这也预示着coreclr相比clr不会一股脑地集成在一起,使用时,按需要引用即可,它的体积也小很多。
4.KVM
既然要做跨平台了,即便vs不能跨平台使用,那至少出一个跨平台编译和管理的工具。这就是KVM的出现,至于为什么叫KVM? 有人猜测因为项目代号叫 Project K。其实这名称并不重要。就KRE称呼很可能改成XRE(dotnetclr)。
(注:各个平台安装kvm,参见https://github.com/aspnet/home )
windows DOS(管理员用户)下安装KVM:
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString(‘https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.ps1‘))"
输入kvm或kvm help查看帮助:
输入kvm list:
上面看到默认的clr是 1.0.0-beta3 x86 ,使用kvm use可以设置成其它:
使用kvm upgrade升级:
5.KPM
使用kpm或kpm help查看帮助:
进入项目根目录,也就是project.json所在路径:
使用kpm add给project.json添加引用项:
这时project.json中,就添加了:
如果想loading下载引用Refereces安装包,就使用kpm restore。
6.K Commands
在project.json添加commands的配置:
执行k ef:
注:K Commands在vs nuget控制台管理器也可以执行的。
关于k命令体会,以后的项目中如执行单元测试,EF迁移,基架模板代码生成等再演示!
6.小结
本章内容就简短了,在此班门弄斧,抱歉了!