KRE(CLR)-KVM-KPM-K Commands

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迁移,基架模板代码生成等再演示!

7.小结

本章内容就简短了,在此班门弄斧,抱歉了!