继上次”vNext之旅(1):从概念和基础开始”之后再次学习vNext重新遇到了弄不懂的事情,花了一些时间学习,今天来分享一下,为后人节省些时间。

起因

在用vNext造轮子——框架的时候引入“Microsoft.Dnx.Runtime”包错误。错误如下:

当时就很郁闷我明明用的是最新的版本:“1.0.0-rc-final”啊,为什么会报错,微软改名之后没有及时更新包吗?

下面我打开了这个包在NuGet的地址。

发现确实只写了“DNX4.5.1”和“DNXCore50”这两个版本,我同时又打开了“Microsoft.Extensions.DependencyInjection”包的NuGet地址。

发现了“.NETFramework 4.5.1”、“.NETPlatform 5.4”、”.NETCore5.0”。

这时我很好奇,这两个包同是vNext的产物,没有原因支持的平台不一样啊,抱着这个问题我觉得创建个ConsoleApp测试一下。

打开“project.json”发现了和类库不一样的地方

这边的frameworks的命名完全不一样,

在类库中为:“net451”、“dotnet5.4”而在这里变成了“dnx451”、“dnxcore50”。

困惑又加重了,难道微软改名之后忘记改了ConsoleApp的模板?

解惑

我试着把这几个关键词输入google,找了了一些文章,终于解决了我的迷惑。

文章地址为:

https://github.com/aspnet/Announcements/issues/98

https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/standard-platform.md

从这段话中说明了为什么“ConsoleApp”和“类库”项目框架目标不一致是正常的。。。

也给出了“ConsoleApp”、“测试项目”还是需要使用“dnx”和“dnxcore”这样的命名,而类库则需要使用“net”和“dotnet”这样的命名。

也给出了迁移方案,同时也给出了编码过程中的环境变量:

1.DNX451 => NET451

2.DNXCORE50 => DONET5_4

同时也发现,微软觉得应用程序和测试项目该采用“dnx”和“dnxcore”命名方式的框架目标。

至此疑惑解开,但还是觉得奇怪,微软为什么要这样区分,当时在.NET Framework上不就没有分这么多吗?

深究

为什么微软需要这么做?

抱着这样的疑问打开第二个链接,发现了这一段很好的解释了“为什么”。

这么做只有一个目标:可移植性。

在之前我们再用NuGet GUI工具打包的时候会发现有很多选择(下图)

而这些平台绝大数都拥有CLR,唯一变的只是应用程序端,只有这个端不一样,那么我开发一个汇率计算算法需要每个平台单独写吗?其实不需要,因为我们都运行于CLR,我们有CTS、CLS还有CLR这些东西你们去做兼容就好了,不需要开发者在纠结了,所以现在的微软一直强调“一个平台战略”、“一次编译到处运行”,只把会变化的应用程序端设置框架版本,而类库等通用的东西尽量变成全部可移植的。

下图来自微软:

右边的就属于类库,而左边的被微软定位为应用程序端的目标运行时。微软希望现代化的类库可以同时运行在这些端的运行时上,当然这个动作需要端的运行时配合与支持(微软给出的CLR的标准、语言规范等)。

下图是对应关系:

交流方式

QQ群:384413261(RabbitHub)

Email:majian159@live.com

vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼的更多相关文章

  1. vNext之旅(1):从概念和基础开始

    ASP.NET vNext or .NET vNext? vNext在曝光以来绝大多数以ASP.NET vNext这样的的字眼出现,为什么这边会提及.NET vNext?原因是我认为ASP.NET只是 ...

  2. ASP.NET 5 Target framework dnx451 and dnxcore50

    中文不知如何定义标题,所以干脆就直接贴出关键字,在 ASP.NET 5 项目的 project.json 配置文件中,会有这样的定义: "frameworks": { " ...

  3. ASP.NTE 5 Target framework dnx451 and dnxcore50(转)原文:http://www.cnblogs.com/xishuai/p/aspnet5-target-framework-dnx451-and-dnxcore50.html

    中文不知如何定义标题,所以干脆就直接贴出关键字,在 ASP.NTE 5 项目的 project.json 配置文件中,会有这样的定义: "frameworks": { " ...

  4. React Native填坑之旅--布局篇

    代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...

  5. ASP.NET vNext or .NET vNext?

    ASP.NET vNext or .NET vNext? 从概念和基础开始 vNext在曝光以来绝大多数以ASP.NET vNext这样的的字眼出现,为什么这边会提及.NET vNext?原因是我认为 ...

  6. Asp.net vNext 学习1

    Asp.net vNext 学习之路(一) 概述 asp.net vNext 也叫 asp.net 5.0,意思是微软推出的下一个版本的asp.net.可以说是微软对asp.net的一个比较重大的重新 ...

  7. [Abp vNext 源码分析] - 2. 模块系统的变化

    一.简要说明 本篇文章主要分析 Abp vNext 当中的模块系统,从类型构造层面上来看,Abp vNext 当中不再只是单纯的通过 AbpModuleManager 来管理其他的模块,它现在则是 I ...

  8. Asp.net vNext 学习之路(一)

    概述 asp.net vNext 也叫 asp.net 5.0,意思是微软推出的下一个版本的asp.net.可以说是微软对asp.net的一个比较重大的重新设计, asp.net vNext是一 个比 ...

  9. [Abp vNext 源码分析] - 7. 权限与验证

    一.简要说明 在上篇文章里面,我们在 ApplicationService 当中看到了权限检测代码,通过注入 IAuthorizationService 就可以实现权限检测.不过跳转到源码才发现,这个 ...

随机推荐

  1. Web系统开发构架再思考-前后端的完全分离

    前言 前后端完全分离其实一直是Web开发人员的梦想,也一直是我的梦想,遥想当年,无论是直接在代码里面输出HTML,还是在HTML里面嵌入各种代码,都不能让人感到满意.期间的痛苦和纠结,我想所有Web开 ...

  2. arcgis地图数据集合

    一.全国的ArcGIS地图SHP格式数据,覆盖的图层信息量基本齐全,除了ArcGIS之外,其他GIS软件(superMap和MapGIS.MapInfo等等)也是用之,适合为GIS开发提供数据素材. ...

  3. 对CVE-2014-6271 [破壳漏洞] 的一次不太深入的跟踪

    @firtst:有些事,该你遇到的始终会遇到!2013年,Struts2远程代码执行漏洞闹的满城风雨时,当时还对此一无所知:2014年4月,HeartBleed掀起波涛汹涌时,较快对此予以关注,晚上跑 ...

  4. 使用ArcGIS JavaScript API 3.18 加载天地图

    对于中国开发者在创建GIS应用的时候,往往比较头疼的是底图资源的缺乏.其实国家测绘地信局就提供一个很好的免费资源:天地图.使用ArcGIS API的开发人员可以直接利用该资源作为地图应用的底图. Ar ...

  5. Android Do not keep activities选项分析

    Android Do not keep activities选项分析 Developer Options里面有一项: Do not keep activities -> 不保留Activitie ...

  6. UITableViewController和XML解析还有地图的简单结合

    然后我的代码就按照上面的这个顺序输出. #import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interfa ...

  7. Xcode7--免证书真机调试

    Xcode7之前,想要真机调试,必须花99刀购买开发者账号,而且步骤繁琐,需要下载证书.随着Xcode7的推出,大幅度的简化了真机调试的步骤,对ios开发工作者和正在学习ios开发的众多码农们,可以说 ...

  8. 分享dubbo.xsd和idubbo.xsd的可用地址

    dubbo.xsd和idubbo.xsd的官方地址不可用 http://code.alibabatech.com/schema/dubbo/dubbo.xsd似乎挂了,真是淡淡的忧伤啊,然后就各种报错 ...

  9. parawork功能使用说明

    项目整体估算 1.项目估算:依据项目属性,开发规模,参考行业平均生存率自动估算软件工作量.成本.工期 : 2.项目生产率分析:掌握研发生产率行业水平,方便项目管理 : 3.工期占比分析:了解项目关键节 ...

  10. regsvr32命令

    regsvr32是Windows操作系统命令,用来注册及反注册DLL文件和ActiveX文件. 1.  使用示例 regsvr32  foo.dll    // 注册foo.dll文件到Windows ...