来源https://docs.asp.net/en/latest/dnx/overview.html

.NET Execution Environment是什么###

.NET Execution Environment (DNX) 是软件开发SDK和运行环境,可以在其上构建和运行跨平台的(Windows,Linux,Mac).NET应用。It provides a host process, CLR hosting logic and managed entry point discovery。 DNX可以运行跨平台的web应用,当然也可以运行其他应用,如控制太应用(但WPF、WCF等是不行的)。

为什么构建DNX###

跨平台####

DNX提供了一致的跨平台开发和执行环境。

构建.NET Core####

DNX大幅简化了使用.NET Core开发跨平台应用的工作。It takes care of hosting the CLR, handling dependencies and bootstrapping your application(承载了CLR,处理依赖,启动应用)。可以通过轻量级的Json文件(project.json)来定义项目和解决方案,并构建和发布。

包生态###

包管理工具彻底改变了现代软件开发,DNX使得方便地创建包。DNX提供了可以安装、创建和管理NuGet包的工具。并且DNX项目对不同目标框架支持交叉编译,然后直接输出NuGet包。你可以在项目中直接引用NuGet包,并自动给你解决依赖问题。当然,你也可以在机器的全局环境下安装开发工具包,用了开发项目。

开源友好####

DNX使得和开源项目更好的协作。通过DNX,你可以很容易的将依赖替换为它的源码,让DNX在运行是编译,方便调试源码,而不用修改项目的其他部分。

项目###

DNX项目很简单,就是一个包含project.json的文件夹,项目名称就是文件夹名字。project.json文件定义了包的元信息,如项目依赖,目标框架等,如下

{
"version": "1.0.0-*",
"description": "ClassLibrary1 Class Library",
"authors": [ "daroth" ],
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": "", "frameworks": {
"net451": { },
"dotnet5.4": {
"dependencies": {
"Microsoft.CSharp": "4.0.1-beta-23516",
"System.Collections": "4.0.11-beta-23516",
"System.Linq": "4.0.1-beta-23516",
"System.Runtime": "4.0.21-beta-23516",
"System.Threading": "4.0.11-beta-23516"
}
}
}
}

文件夹中的文件,除非在project.json中显式排除,都是包含在项目中的。

也可以将命令做为项目的一部分(见commands)。如下

"commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands"
},

通过frameworks属性来指定目标框架。DNX支持交叉编译,在构建NuGet包时,会为每个目标框架创建对应lib文件夹。

你可以用.NET Development Utility (DNU)来构建、打包和发布DNX项目。构建项目产生二进制输出,打包产生NuGet包并可以上传到包管理站点(如http://nuget.org)。发布是收集所有必要运行时构件(必要的DNX和包),放到一个文件夹内,然后就可以作为应用来部署。

详见DNX Projects

依赖###

DNX中依赖有名字和版本号构成,版本好应该遵从Semantic Versioning。典型的依赖是指NuGet安装包或者其他DNX项目。项目依赖是通过当前项目的同级文件夹或者global.json指定的项目路径。如下

{
"projects": [ "src", "test" ],
"sdk": {
"version": "1.0.0-rc1-final"
}
}

global.json也定义构建项目的最低的DNX版本号(sdk)。

依赖是transitive,你只需要明确最顶层的依赖。使用安装NuGet包,DNX会处理解析完整的依赖图。项目引用在运行时在内存中来解析。这意味这你有完全的灵活性来部署你的DNX项目,可以二进制包的形式,也可以使用源码的方式。

包和Feeds###

依赖的包首先需要安装,可以使用DNU来给项目安装新的包,或者恢复依赖包。如下命令,下载并安装project.json中的依赖包。

dnu restore

通过配置的package feeds可以恢复包。可以通过NuGet configuration files来配置可以用package feeds。

命令###

A command is a named execution of a .NET entry point with specific arguments. 可以在project.json中定义命令。如下

"commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands"
},

可以使用DNX来执行项目中定义的命令,如下

dnx web

命令可以通过NuGet包来构建和分发。可以用DNU来安装全局命令。

dnu commands install MyCommand

更多信息见commands

应用Host###

The DNX application host is typically the first managed entry point invoked by DNX,DNX并负责处理依赖解析,解析project.json文件,提供其他服务并调用应用入口点(invoking application entry point)。

或者,你可以用DNX直接来invoke应用入口。这样做要求应用必须在一个文件夹内构建,所有依赖也要在同一个文件夹内。一般不会使用DNX,而是使用DNX Application Host。

DNX application host通过依赖注入给应用提供了一系列的服务,如IServiceProvider, IApplicationEnvironment and ILoggerFactory。 Application host services can be injected in the constructor of the class for your Main entry point or as additional method parameters to your Main entry point.

编译模块###

编译模块是一个扩展点,可以让你参与到DNX的编译过程中。通过继承ICompileModule接口实现编译模块,并把其放到项目的compiler/preprocess或者compiler/postprocess中。

DNX Version Manager###

你可以安装多个版本的DNX,可以使用 .NET Version Manager (DNVM)来安装和管理不同版本的DNX。DNVM可以查看、安装和切换DNX。

详见Getting Start

DNX 概览的更多相关文章

  1. Activity之概览屏幕(Overview Screen)

    概览屏幕 概览屏幕(也称为最新动态屏幕.最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务. 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除 ...

  2. Atitit 软件工程概览attilax总结

    Atitit 软件工程概览attilax总结 1.1. .2 软件工程的发展 进一步地,结合人类发展史和计算机世界演化史来考察软件工程的发展史. 表2 软件工程过程模型 表2将软件工程的主要过程模型做 ...

  3. 最新Linux部署.NET,Mono and DNX

    这几天一直在折腾在Linux下的ASP.NET 5,就下在看来在其它操作系统中ASP.NET 5或.NET应用,要想在完整的MS VM(CoreCLR)上运行还不远远达不到,应用的效果. 目前只能在M ...

  4. .NET跨平台:在Ubuntu上用自己编译的dnx运行ASP.NET 5示例程序

    在 Linux Ubuntu 上成功编译 dnx 之后,会在 artifacts/build/ 文件夹中生成 dnx-coreclr-linux-x64/ 与 dnx-mono/ 这2个文件夹,前者是 ...

  5. .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序

    在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...

  6. 将 xunit.runner.dnx 的 xml 输出转换为 Nunit 格式

    由于目前 DNX 缺乏 XSLT 的转换能力,因此只能使用变通方法.具体参考这个链接 主要内容复制过来是: From @eriklarko on July 14, 2015 7:38 As a wor ...

  7. .NET跨平台:在Linux Ubuntu上编译coreclr/corefx/dnx(20150617)

    编译时间:北京2015年6月17日上午 操作系统:Ubuntu 14.04.2 LTS Mono版本:Mono JIT compiler version 4.3.0 (master/3445ac5 T ...

  8. iOS开发系列—Objective-C之基础概览

    概览 前面我们已经用了几章内容进行C语言介绍,当然要通过几篇文章完整的介绍C语言的知识是不太现实的,例如C语言的文件操作.内存申请等我们都没有重点介绍,当然核心知识点基本都已经提到了,后面有时间我们会 ...

  9. iOS开发系列--IOS程序开发概览

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...

随机推荐

  1. Oracle 数据库导出时 EXP-00008;ORA-00904

    问题是客户端和服务器端版本问题,我本地是11g,而服务器端是10g. 规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务器. ...

  2. rxjs的世界

    rxjs学习了几个月了,看了大量的东西,在理解Observable的本文借鉴的是渔夫的故事,原文,知识的主线以<深入浅出rxjs>为主,动图借鉴了rxjs中文社区翻译的文章和国外的一个动图 ...

  3. 浅谈数据库系统中的cache(转)

    http://www.cnblogs.com/benshan/archive/2013/05/26/3099719.html 浅谈数据库系统中的cache(转)   Cache和Buffer是两个不同 ...

  4. 【bzoj3668】[Noi2014]起床困难综合症 贪心

    原文地址:http://www.cnblogs.com/GXZlegend/p/6797090.html 题目描述 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神 ...

  5. 全自动google检索后台

    是不是每天为了找后台,伤破了蛋,每次在google输入”site:www.xxx.com intitle:登陆”.是不是手都累麻了,无聊又浪费时间.有了它,你的蛋就不用在碎了 直接上源码 1 2 3 ...

  6. 结构型设计模式之装饰模式(Decorator)

    结构 意图 动态地给一个对象添加一些额外的职责.就增加功能来说,D e c o r a t o r 模式相比生成子类更为灵活. 适用性 在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. ...

  7. [ CodeVS冲杯之路 ] P1295

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1295/ 数据很小,直接DFS,加上剪枝 剪枝其实就是判重,首先深度是行下标,这里自带不重复,枚举的列下标,用 f 记录 ...

  8. Linux内核中断引入用户空间(异步通知机制)【转】

    转自:http://blog.csdn.net/kingdragonfly120/article/details/10858647 版权声明:本文为博主原创文章,未经博主允许不得转载. 当Linux内 ...

  9. 函数atof,atoi,atol,strtod,strtol,strtoul 描述

    函数atof,atoi,atol,strtod,strtol,strtoul atof(将字串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul表头文件 #in ...

  10. SpringBoot部署到Linux服务器

    今天来谈一下,用SpringBoot写的Demo来配置到Linux服务器. 这里,我用阿里云服务器作为实例,SpringBoot集成了SpringMvC+ mybatis 框架,用maven管理jar ...