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": {
"dnx451": { },
"dnxcore50": { }
}
frameworks 配置的是什么东西?dnx451 和 dnxcore50 又是什么鬼?
可能了解过 ASP.NTE 5 的童鞋会知道,但如果再深入一些,就必须搞清楚 ASP.NTE 5 相关内容的来龙去脉,幸好几个月之前,我写过几篇类似的博文,不过现在已经忘的差不多了,而且 ASP.NTE 5 的变化也非常大,现在又重读了之前写的博文,然后又 Google 了一下资料,回忆的差不多了,再记录一遍。
之前的相关博文:
- 魅力 .NET:从 Mono、.NET Core 说起
- .NET Core 和 .NET Framework 之间的关系
- Microsoft Build 2015 汇总
- K & DN 的前世今生(微软开源命名变革)
首先,再明确下 .NET Core 和 .NET Framework 之间的关系?我们之前开发 ASP.NET 应用程序,微软更新它,然后我们应用程序跟着更新,1.0->2.0->3.0->4.0->4.5->…,应用程序还是照样跑,所以我们一般不太关心 .NET Framework 到底是什么鬼?但现在微软搞了 ASP.NET 5,开发方式和之前有很大的不同,比如上面的配置代码,你就需要搞清楚到底是什么东西?.NET Core 和 .NET Framework 的关系,之前的博文中我说过是子集关系,其实现在看来也不是完全正确,.NET Core 应该是全新的一个 .NET Framework 实现,关系的话,应该是平级。
.NET Core 包含:
- 运行时库:.NET Core Runtime(coreclr、dnx)
- 基础类库:.NET Core Framework(corefx)
我们一般说的 .NET Framework 是基础类库,也就是项目中引用的程序集,其实这并不准确,它应该还包含运行时库,.NET Framework 是一个大的概念,微软更新 .NET Framework 4.5.1,其实并不只是更新基础类库,还有运行时的一些东西,比如编译器等等,不过我们开发者直接感受到的是基础类库的变化,所以概念中的理解会有些偏差。
下面两张图可以更好的理解。
从第一张图中可以看到,.NET Framework 4.6 包含了一大堆东西(重要的是最后一条),倒第二条中说 ASP.NET 5 可以运行在 .NET Framework 4.6 上,这是什么意思呢?ASP.NET 5 可以运行在 .NET Core 上,又可以运行在 Framework 4.6 上,也就是 project.json 配置文件中的 frameworks 配置,ASP.NET 5 和 .NET Core 并不是一一对应,脱离了 .NET Core,ASP.NET 5 照样可以运行,只不过和一般 ASP.NET 应用程序没什么区别,比如不能跨平台,但如果反过来就不行了,比如基于 .NET Framework 4.6 的一般 ASP.NET 应用程序就不能运行在 .NET Core 上,为什么?因为之前的 ASP.NET 都是基于 .NET Framework 设计的,并没有兼容 .NET Core。
第二张图很好的说明了 .NET Core 和 .NET Framework 之前的关系,注意 .NET Framework 4.6 下面注释中的 for windows 字眼,后面有这样一个词 Desktop CLR,其实说的就是 .NET Framework CLR,或者称之为 Windows .NET CLR,.NET Core 5 图中包含 CoreCLR 和 .NET Native,其实 .NET Native 也是 CoreCLR 的一种,称之为代码即时编译(不经过中间语言,直接将程序代码编程成机器语言),注释中的 .NET libraries 和 runtimes,其实就是我们上面所说 .NET Core 的两点内容。
再来说下运行时库是什么鬼?ASP.NET 5 的运行时就是 DNX
The DNX (a .NET Execution Environment) contains the code required to bootstrap and run an application, including the compilation system, SDK tools, and the native CLR hosts.
DNX 主要包含编译器、SDK 工具、即时编译运行时(上面说到的 .NTE Native),运行 ASP.NET 5 应用程序命令 dnx kestrel
,其实就是 SDK tools 的一种,它的作用就是将 ASP.NET 5 应用程序运行在 DNX 上,有点像 IIS 站点中的启动/停止。
好了,了解了这么多。我们再来看 project.json 中的 frameworks 配置,它的作用就是配置 ASP.NET 5 应用程序运行在哪个环境中?这里说的环境并不只包含运行时,还有基于的基础类库。
看一下 frameworks 配置选项:
dnxcore50
DNX SDK running on CoreCLR/CoreFxdnx451
DNX SDK running on .Net 4.5.1 (Desktop CLR / Full BCL and FCL)net46
.Net Framework SDK running on .Net 4.6 (Desktop CLR / Full BCL and FCL).uap10.0
UWP SDK running on .Net Native/CoreFxdotnet
any pure IL code which declares its dependencies (instead of a PCL contract). Framework dependencies are available for .Net 4.6, DNX or UWP.
因为我们是 ASP.NET 开发,所以常用的是 dnx451 和 dnxcore50,简单总结:
dnx*
The Dotnet Runtime Environment for the .NET Frameworkdnxcore*
The Dotnet Runtime Environment for the .NET Core CLR
*
代表版本号,微软以后可能会进行更新升级,结合之前的说明,再看上面的定义,其实就非常好理解了,说白了,dnx*
只适用于 windows,dnxcore*
适用于跨平台,就这么简单。
一张非常详细的图:
另外,frameworks 还有另外一种作用,就是对运行的每一种环境进行单独配置,我们最常配置的,dnx451 和 dnxcore50 两种环境都引用同一个程序集,配置代码:
"dependencies": {
"library1": "1.0.0"
},
"frameworks": {
"dnx451": { },
"dnxcore50": { }
}
如果 dnx451 引用 library1,dnxcore50 不引用,那改如何配置呢?配置代码:
"dependencies": {
},
"frameworks": {
"dnx451": {
"dependencies": {
"library1": "1.0.0"
}
},
"dnxcore50": { }
}
如果 dnx451 和 dnxcore50 都引用 library1,但是 library1 需要编写不同的代码,该如何操作?答案如下:
#if DNX451
//Code here for dnx451
#elif DNXCORE50
//code here for dnxcore50
#endif
需要注意的是,dnx451 和 dnxcore50 都可以引用 ASP.NET 5 类库项目,但对于非 ASP.NET 5 类库项目,dnx451 可以引用(有警告),dnxcore50 则不可以引用。
参考资料:
- Project.json file
- Introducing .NET Core
- Announcing NuGet 3.1 with Support for Universal Windows Platform
- Demystifying PCL’s, .NET Core, DNX and UWP
- What frameworks are available in ASP.NET 5 applications?
- Target framework dnx451 or net451 in class library projects
- Project.json definition dnx451 vs .dotnet ( 4.51)
ASP.NTE 5 Target framework dnx451 and dnxcore50(转)原文:http://www.cnblogs.com/xishuai/p/aspnet5-target-framework-dnx451-and-dnxcore50.html的更多相关文章
- ASP.NET缓存全解析1 转自网络原文作者李天平
有时候总听到网友说网站运行好慢,不知如何是好:有时候也总见到一些朋友写的网站功能看起来非常好,但访问性能却极其的差.没有“勤俭节约”的意识,势必会造成“铺张浪费”.如何应对这种情况,充分利用系统缓存则 ...
- [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序使用异步及存储过程
这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第九篇:为ASP.NET MVC应用程序 ...
- API基础开发学习网址
http://www.cnblogs.com/shanyou/category/307401.html http://www.cnblogs.com/beginor/archive/2012/03/1 ...
- 什么是目标框架别名(What are the Target Framework Monikers (TFMs))?
我们现在的.NET Core 1.0应用(ASP.NET Core 1.0应用或控制台应用)有了新的被运行在不同框架上的可能性:①运行在.NET Core平台上 ②运行在传统的.NET Framewo ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- 开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、简单吞吐量压力测试
继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-ho ...
- Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1
这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...
- Asp.Net MVC 模型(使用Entity Framework创建模型类)
这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...
- [转]MSBuild Target Framework and Target Platform
本文转自;https://msdn.microsoft.com/en-us/library/hh264221.aspx A project can be built to run on a targe ...
随机推荐
- Ajax基础详解1
Ajax也是前端必备技能了,学习任何语言,都需要以理论为基础的大量实践才能真正学会,之前学了Ajax很多遍,因为缺乏大量实践,总是会忘.所以不实践是失败之母...当然理论基础也很重要啦,今天谈谈我对A ...
- jquery的基本动画方法
1 在使用$.extent()的时候,我们一般不放function类型,如果放的话,提前测试下. ?2 Function类型是一种基本类型还是引用类型呢. 3 $('<div>') 指创建 ...
- 八幅漫画理解使用JSON Web Token设计单点登录系统
用jwt这种token的验证方式,是不是必须用https协议保证token不被其他人拦截? 是的.因为其实只是Base64编码而已,所以很容易就被解码了.如果你的JWT被嗅探到,那么别人就可以相应地解 ...
- 【ELK Stack】ELK+KafKa开发集群环境搭建
部署视图 运行环境 CentOS 6.7 x64 (2核4G,硬盘100G) 需要的安装包 Runtime jdk1.8 : jdk-8u91-linux-x64.gz (http://www.ora ...
- ansible-1 的安装
该文章摘自:http://my.oschina.net/firxiao/blog/343395,该文章制作笔记使用,不做他用,转载请注明原文链接出处 Ansible 默认是基于SSH协议进行通信的. ...
- 在Windows和UNIX下利用PHP和LDAP进行身份验证
我现在的老板曾要求我为企业内部的Web服务提供一种标准的身份验证方法.我遇到的一个主要问题就是我们公司主要使用了两种平台:UNIX和.所以,我的第一个想法并不很成功:它要求每个员工都使用UNIX或者L ...
- winform之判断验证码,,附加验证码的一般处理程序
这里用的一般处理程序画的验证码图片. 判断验证码步骤: ①先在一般处理程序中获取验证码(一般处理程序中session的调用→context.Session[]) string code = GetRn ...
- hdu2923 最短路floyd
建图还是有点烦人的. #include<map> #include<string> #include<stdio.h> #include<iostream&g ...
- Java基础-父类-子类执行顺序
代码解析 子类 package com; /** * 子类 * @author huage * */ public class Test extends Test1{ public static vo ...
- structs环境搭建
(1)<s:fielderror />放在JSP中,如果没在web.xml中配置filter相关内容,会有The Struts dispatcher cannot be found.从而显 ...