vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼
继上次”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都是什么鬼的更多相关文章
- vNext之旅(1):从概念和基础开始
ASP.NET vNext or .NET vNext? vNext在曝光以来绝大多数以ASP.NET vNext这样的的字眼出现,为什么这边会提及.NET vNext?原因是我认为ASP.NET只是 ...
- ASP.NET 5 Target framework dnx451 and dnxcore50
中文不知如何定义标题,所以干脆就直接贴出关键字,在 ASP.NET 5 项目的 project.json 配置文件中,会有这样的定义: "frameworks": { " ...
- 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": { " ...
- React Native填坑之旅--布局篇
代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...
- ASP.NET vNext or .NET vNext?
ASP.NET vNext or .NET vNext? 从概念和基础开始 vNext在曝光以来绝大多数以ASP.NET vNext这样的的字眼出现,为什么这边会提及.NET vNext?原因是我认为 ...
- Asp.net vNext 学习1
Asp.net vNext 学习之路(一) 概述 asp.net vNext 也叫 asp.net 5.0,意思是微软推出的下一个版本的asp.net.可以说是微软对asp.net的一个比较重大的重新 ...
- [Abp vNext 源码分析] - 2. 模块系统的变化
一.简要说明 本篇文章主要分析 Abp vNext 当中的模块系统,从类型构造层面上来看,Abp vNext 当中不再只是单纯的通过 AbpModuleManager 来管理其他的模块,它现在则是 I ...
- Asp.net vNext 学习之路(一)
概述 asp.net vNext 也叫 asp.net 5.0,意思是微软推出的下一个版本的asp.net.可以说是微软对asp.net的一个比较重大的重新设计, asp.net vNext是一 个比 ...
- [Abp vNext 源码分析] - 7. 权限与验证
一.简要说明 在上篇文章里面,我们在 ApplicationService 当中看到了权限检测代码,通过注入 IAuthorizationService 就可以实现权限检测.不过跳转到源码才发现,这个 ...
随机推荐
- 【模块化编程】理解requireJS-实现一个简单的模块加载器
在前文中我们不止一次强调过模块化编程的重要性,以及其可以解决的问题: ① 解决单文件变量命名冲突问题 ② 解决前端多人协作问题 ③ 解决文件依赖问题 ④ 按需加载(这个说法其实很假了) ⑤ ..... ...
- Json解析,Json-lib
网络资源参考 http://www.json.org/json-zh.html http://code.alibabatech.com/wiki/pages/viewpage.action?pageI ...
- sharepoint报HRESULT:0x80131904的错误的原因和解决方法
在新建文件库的时候出现的.下上传文件和更改权限,都是在报这个HRESULT:0x80131904的错误,基本所有操作都报同一个错误,如下图: 错误原因 这个问题其实就是:sharepoint配置文件( ...
- iOS之There was an internal API error错误
There was an internal API error. 错误原因:把Product Name作为程序名称,程序名称错乱 解决方法:检查Product Name, 不要包含中文以及特殊字符.在 ...
- JSON解析和XML解析对比
JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...
- Android高效计算——RenderScript(一)
高效计算——RenderScript RenderScript是安卓平台上很受谷歌推荐的一个高效计算平台,它能够自动把计算任务分配到各个可用的计算核心上,包括CPU,GPU以及DSP等,提供十分高效的 ...
- Maven之 聚合与继承 详解
说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ...
- sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转]
SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式.下面将主要讨论一下后者的备份与恢复. ...
- [Java入门笔记] 面向对象编程基础(一):类和对象
什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...
- CSS3动画事件
CSS3 的动画效果强大,在移动端使用广泛,动画执行开始和结束都可以使用JS来监听其事件. animationstart animationend 以下是一个示例 <!DOCTYPE html& ...