来源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. 软工实践Alpha冲刺(7/10)

    队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 已经解决登录注册等基本功能的界面. 完成非功能的主界面制作 ...

  2. Android事件分发机制详解(2)----分析ViewGruop的事件分发

    首先,我们需要 知道什么是ViewGroup,它和普通的View有什么区别? ViewGroup就是一组View的集合,它包含很多子View和ViewGroup,是Android 所有布局的父类或间接 ...

  3. atom插件之less-autocompile

    less-autocompile package Auto compile LESS file on save. Add the parameters on the first line of the ...

  4. 洛谷 P3349 [ZJOI2016]小星星 解题报告

    P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...

  5. 转:ExecutorService

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过 Executor来启动线程比用Thread的start()更好.在新特征 ...

  6. Spring 的IOC 和Aop

    Spring 的IOC 和Aop

  7. zepto.js 自定义打包集成其他模块构建流程

    1.首先在自己的电脑上要安装Node.js和npm包管理工具: 2.从github上下载zepto.js的源文件包到本地磁盘(例如:E:\Learning\JS): 地址:https://github ...

  8. 搭建github服务器

    https://about.gitlab.com/downloads/#centos6

  9. Centos 查看内存

    1. 查看内存使用 free -mh 2. 读出的内核信息进行解释 cat /proc/meminfo MemTotal: kB #所有可用RAM大小 (即物理内存减去一些预留位和内核的二进制代码大小 ...

  10. 多线程设计模式 - Future模式之JAVA原生实现

    在之前一篇博客中介绍了Future设计模式的设计思想以及具体实现,今天我们来讲一下使用JDK原生的包如何实现. JDK内置的Future主要使用到了Callable接口和FutureTask类. Ca ...