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程序.但是这里我想强调一下,前面的 ...
随机推荐
- android 自定义控件之下拉刷新源码详解
下拉刷新 是请求网络数据中经常会用的一种功能. 实现步骤如下: 1.新建项目 PullToRefreshDemo,定义下拉显示的头部布局pull_to_refresh_refresh.xml &l ...
- Qt-Creator 加入qwt库
qwt是基于Qt的开源图表库 从官网下载qwt的源码 http://sourceforge.jp/projects/sfnet_qwt/downloads/qwt/6.1.0/qwt-6.1.0.ta ...
- 【bzoj4001】[TJOI2015]概率论 生成函数+导数
题目描述 输入 输入一个正整数N,代表有根树的结点数 输出 输出这棵树期望的叶子节点数.要求误差小于1e-9 样例输入 1 样例输出 1.000000000 题解 生成函数+导数 先考虑节点个数为$n ...
- 应用交付工程师Troubleshooting经验分享
应用交付工程师Troubleshooting经验分享 来源:http://blog.51cto.com/virtualadc/1188328 来源:http://blog.51cto.com/virt ...
- webpack配置优化
1.使用alias简化路径 alias: { 'vue$': 'vue/dist/vue.esm.js', '@': resolve('src') } 2.overlay界面弹出编译错误 devSer ...
- PAT L1 049 天梯赛座位分配
天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...
- Installing patches on an ESXi 5.x by the command
Purpose This article outlines the procedure for installing patches on an ESXi 5.x host from the comm ...
- RHEL退出RHN
清除原有数据 rm -rf /etc/sysconfig/rhn/rhn_systemidrm -rf /var/cache/yum/*yum clean all 加载刷新源 yum repolist ...
- Winform 模拟Session
背景 在Web中Session的功能很好用,于是想Winform中实现该功能,典型应用场景则是登陆成功后,当一段时间不操作,则该会话过期,提示重新登陆. 资源下载 测试代码 示例说明:登陆进去10s不 ...
- C++ 播放音频流(PCM裸流)--改善
直接上代码,如果有需要可以直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用了(注意将声道和频率与你自己的文件对应).当然我自己也用VS2008写了个例子上传了,如果有需要下载地址如下: ...