DNX 概览
来源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 概览的更多相关文章
- Activity之概览屏幕(Overview Screen)
概览屏幕 概览屏幕(也称为最新动态屏幕.最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务. 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除 ...
- Atitit 软件工程概览attilax总结
Atitit 软件工程概览attilax总结 1.1. .2 软件工程的发展 进一步地,结合人类发展史和计算机世界演化史来考察软件工程的发展史. 表2 软件工程过程模型 表2将软件工程的主要过程模型做 ...
- 最新Linux部署.NET,Mono and DNX
这几天一直在折腾在Linux下的ASP.NET 5,就下在看来在其它操作系统中ASP.NET 5或.NET应用,要想在完整的MS VM(CoreCLR)上运行还不远远达不到,应用的效果. 目前只能在M ...
- .NET跨平台:在Ubuntu上用自己编译的dnx运行ASP.NET 5示例程序
在 Linux Ubuntu 上成功编译 dnx 之后,会在 artifacts/build/ 文件夹中生成 dnx-coreclr-linux-x64/ 与 dnx-mono/ 这2个文件夹,前者是 ...
- .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序
在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...
- 将 xunit.runner.dnx 的 xml 输出转换为 Nunit 格式
由于目前 DNX 缺乏 XSLT 的转换能力,因此只能使用变通方法.具体参考这个链接 主要内容复制过来是: From @eriklarko on July 14, 2015 7:38 As a wor ...
- .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 ...
- iOS开发系列—Objective-C之基础概览
概览 前面我们已经用了几章内容进行C语言介绍,当然要通过几篇文章完整的介绍C语言的知识是不太现实的,例如C语言的文件操作.内存申请等我们都没有重点介绍,当然核心知识点基本都已经提到了,后面有时间我们会 ...
- iOS开发系列--IOS程序开发概览
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...
随机推荐
- typescript语言
百度百科:2013年6月19日,在经历了一个预览版之后微软正式发布了正式版TypeScript 0.9
- BI商业智能培训系列——(一)概述
简介: Business Intelligence,简称 BI. 商业智能,是指用现代的技术进行数据分析,以实现商业价值,这些技术包括数据仓库技术,线上分析处理技术,数据挖掘,数据展现技术等. 以往的 ...
- P1270 “访问”美术馆
题目描述 经过数月的精心准备,Peer Brelstet,一个出了名的盗画者,准备开始他的下一个行动.艺术馆的结构,每条走廊要么分叉为两条走廊,要么通向一个展览室.Peer知道每个展室里藏画的数量,并 ...
- hadoop学习之HDFS
1.什么是大数据?什么是云计算?什么是hadoop? 大数据现在很火,到底什么是大数据,多大的数据才算大,一般而言对于TB级以上的数据我们成为大数据,对于这些数据它的价值在哪?大数据的价值就是我们大量 ...
- 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---47
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- redis加入到Windows系统服务
1.cmd命令,到redis的安装目录输入以下命令 安装命令: redis-server.exe --service-install redis.windows.conf --loglevel ve ...
- SpringBoot部署到Linux服务器
今天来谈一下,用SpringBoot写的Demo来配置到Linux服务器. 这里,我用阿里云服务器作为实例,SpringBoot集成了SpringMvC+ mybatis 框架,用maven管理jar ...
- Centos 6.3软件安装
一.软件安装包的类型: 1. tar包,如software-1.2.3-1.tar.gz.它是使用UNIX系统的打包工具tar打包的. 2. rpm包,如software-1.2.3-1.i386.r ...
- 如何在natTable表格上添加双击事件
在项目当中,有时候需要双击表格中的某一行触发一个事件或者一次数据请求,这时候,我们就需要在表格中绑定相关事件,思路实际上很简单,添加一个绑定事件就ok了,那么怎么添加呢?简单实现如下: 1.创建绑定双 ...
- Django和SQLAlchemy区别
译者注:本文首先介绍了什么是ORM,然后从多个方面对Python语言下的两个ORM库Django和SQLAlchemy进行比较,为ORM的选型提供了较为全面的指导建议.以下是译文. ORM是什么? 在 ...