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

"frameworks": {
"dnx451": { },
"dnxcore50": { }
}

frameworks 配置的是什么东西?dnx451 和 dnxcore50 又是什么鬼?

可能了解过 ASP.NET 5 的童鞋会知道,但如果再深入一些,就必须搞清楚 ASP.NET 5 相关内容的来龙去脉,幸好几个月之前,我写过几篇类似的博文,不过现在已经忘的差不多了,而且 ASP.NET 5 的变化也非常大,现在又重读了之前写的博文,然后又 Google 了一下资料,回忆的差不多了,再记录一遍。

之前的相关博文:

首先,再明确下 .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 工具、即时编译运行时(上面说到的 .NET 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/CoreFx
  • dnx451 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/CoreFx
  • dotnet 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 Framework
  • dnxcore* 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 则不可以引用。

参考资料:

ASP.NET 5 Target framework dnx451 and dnxcore50的更多相关文章

  1. 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": { " ...

  2. 什么是目标框架别名(What are the Target Framework Monikers (TFMs))?

    我们现在的.NET Core 1.0应用(ASP.NET Core 1.0应用或控制台应用)有了新的被运行在不同框架上的可能性:①运行在.NET Core平台上 ②运行在传统的.NET Framewo ...

  3. vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼

    继上次"vNext之旅(1):从概念和基础开始"之后再次学习vNext重新遇到了弄不懂的事情,花了一些时间学习,今天来分享一下,为后人节省些时间. 起因 在用vNext造轮子--框 ...

  4. ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)

    本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...

  5. ASP.NET MVC - Entity Framework

    ASP.NET MVC - Entity Framework 实体关系 关系是某个实体(表)的一条记录对应于另一个实体(表)的一条或多条记录. 一对多关系 单方面的包含关系称为一对多,而一对多和一对一 ...

  6. Vs2013 坑爹的Target framework问题

    之前的一个项目是使用Vs2008来开发的,因为这段时间家里有事情所以只能跟经理协商在家里来做此项目,因为家里的VS是2013的所以在迁移时没有什么问题 但今天我更改一个类库的文件后重新生成解决方案结果 ...

  7. 使用ASP.NET MVC+Entity Framework快速搭建系统

    详细资料: http://www.cnblogs.com/dingfangbo/p/5771741.html 学习 ASP.NET MVC 也有一段时间了,打算弄个小程序练练手,做为学习过程中的记录和 ...

  8. ASP.NET Identity + Entity Framework 6 注意

    最近一个项目使用ASP.NET Identity + Entity Framework 6开发,本来一切正常. 某时注意到,更改密码功能程序执行起来没有问题,界面上也报修改密码成功,但实际上密码并没有 ...

  9. [转]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 ...

随机推荐

  1. CMS模板应用调研问卷

    截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...

  2. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  3. UWP学习目录整理

    UWP学习目录整理 0x00 可以忽略的废话 10月6号靠着半听半猜和文字直播的补充看完了微软的秋季新品发布会,信仰充值成功,对UWP的开发十分感兴趣,打算后面找时间学习一下.谁想到学习的欲望越来越强 ...

  4. Web性能优化:What? Why? How?

    为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...

  5. Javascript生成二维码(QR)

    网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...

  6. MVC CodeFirst简单的创建数据库(非常详细的步骤)

       最近在学习MVC的开发,相信有过开发经验的人初学一个新的框架时候的想法跟我一样最关心的就是这个框架如何架构,每个架构如何分工,以及最最关键的就是如何与数据库通信,再下来才是学习基础的页面设计啊等 ...

  7. 深入理解CSS六种颜色模式

    前面的话 赏心悦目的颜色搭配让人感到舒服,修改元素颜色的功能让人趋之若鹜.但颜色规划不当,会让网站用户无所适从.颜色从<font color="">发展至今,保留了很多 ...

  8. ASP.NET MVC原理

    仅此一文让你明白ASP.NET MVC原理   ASP.NET MVC由以下两个核心组成部分构成: 一个名为UrlRoutingModule的自定义HttpModule,用来解析Controller与 ...

  9. MVC还是MVVM?或许VMVC更适合WinForm客户端

    最近开始重构一个稍嫌古老的C/S项目,原先采用的技术栈是『WinForm』+『WCF』+『EF』.相对于现在铺天盖地的B/S架构来说,看上去似乎和Win95一样古老,很多新入行的,可能就没有见过经典的 ...

  10. APEX:对object中数据进行简单处理?

    在Salesforce中,常常要对各种数据进行处理,已满足业务逻辑.本篇文章会介绍如何实现从object获取数据,然后将取得的数据进行一系列简单处理. 第一步:SongName__c 是一个新建的ob ...