1. 什么是.NET执行环境 ?web
.NET Execution Environment(DNX) 是一个SDK 和运行时环境,它包含全部的你须要建立和运行.net应用程序的组件。它提供一个主机进程,CLR宿主逻辑和管理入口点。DNX是为执行跨平台的asp.net的Web应用程序而建立的。可是它也能执行其它类型的.net应用程序,如控制台应用程序。json
2. 为何建立DNX ?安全
DNX提供一个在不一样平台开发和执行的环境。你能够用DNX在一种平台上面开发,而后部署到另外一个平台上面去。并发
DNX简化了开发跨平台的应用程序, 它负责的给CLR宿主,处理依赖和启动你的应用程序。你能够经过轻量级的json配置文件定义你的应用程序,创建你的工具并发布它。框架
包的管理彻底地改变了如今应用的开发,DNX使其很容易地建立和应用包。DNX提供工具安装、建立、管理NuGet包。DNX工程简化了利用交叉编译为不一样的构架生成不一样的NuGet包。你能够直接引用NuGet包和还有依赖。你也能够建立和安全开发工具asp.net
DNX使其很容易与开源的工程一块儿工做,经过DNX你能够很容易地用源代码替换掉一个已经存在的依赖。让DNX在运行时编译,而后你能够Debug源代码和修改它。ide
3. 工程函数
一个DNX的工程是一个含有project.json的文件的目录。文件夹的目录名就是工程的名字。你能够用DNX工程建立NuGet包。project.json文件定义了你的包的元数据,你的工具的依赖文件和哪些框架你须要使用的:工具
{post
"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",
}
}
}
}
}
在"frameworks"属性下面你能够声明你须要哪一个构架来构建你的应用。 DNX能够交叉编译每个构架建立相应的lib目录。
你能够利用 .NET Development Utility(DNU)来建立,打包和发布DNX工程, 生成二进制文件。打包能够生成NuGet package,而后上传到package feed. 发布是把全部相关的组件打包到一个独立的文件当中以便发布当前应用。
4. 依赖
依赖在DNX由名字和版本号组成。版本号应该遵循语义版本(主版号-次版本号-补丁). 典型的依赖参考安装的NuGet包或者另外一个DNX工程。工程的引用在当前目录引用或者用global.json在解决方案一级:
{
"projects": ["src", "test"],
"sdk": {
"version":"1.0.0-rc1-final"
}
}
global.json文件也定义了最小的DNX版本以用来建立当前的工程。
依赖是能够传递的,你能够只在最顶级申明你的依赖。DNX能够下载整个依赖图用安装的NuGet包。工程依赖生成在运行时在生成工程的时候,这样可使你灵活地用二进制工做或者源文件部署你的DNX应用。
5. 包和摘要
对包的引用你首先要安装你的包,你能够用DNU去去安装下载新的包到目前的或者从新恢复全部的依赖。下面的命令是下载和安装全部的在project.json里申明的全部包:
dnu restore
包被重置利用配置的包文件。能够配置包的摘要用NuGet.config
6. 命令
一个命令是一个命名的.net运行的入口。你能够在project.json文件中定义命令:
"commands":{
"web":"Microsoft.AspNet.Server.Kestrel",
"ef":"EntityFramework.Commands"
},
你能够像下面这样来用DNX执行你的命令:
dnx web
命令能够作为NuGet包的形式被建立和发布, 你能够用DNU去安装全局的命令:
dnu commands install MyCommand
7. 应用宿主
DNX应用程序宿主是被DNX第一个调用的管理入口,负责处理依赖,解释project.json, 提供其它的服务和调用应用程序的入口。
另外,你能够用直接DNX调用你的应用程序入口。用DNX而不用DNX 应用宿主并非很常见。
DNX应用宿主提供一系统的应用程序依赖(如IServiceProvider, IApplicationEnvironment和ILoggerFactory).应用程序宿主服务能够在你的主入口中被注入到构造函数当中。
8. 编译模块
编译模块是一个能够扩展的点,可让你参与 到DNX编译的过程中。你能够经过实现ICompileModule接口来实现你本身的编译模块,而后放到compiler/preprocess或者compiler/postprocess当中去。
9. DNX版本管理
你能够安装不一样的DNX版本到你机器上去。你能够用.NET Version Manager(DNVM)来管理不一样的DNX版本。DNVM可让你在你的机器上面列出不一样的DNX版本, 安装不一样的版本转换当前激活的版本。