1. 什麼是.NET執行環境 ?
.NET Execution Environment(DNX) 是一個SDK 和運行時環境,它包含所有的你需要創建和運行.net應用程序的組件。它提供一個主機進程,CLR宿主邏輯和管理入口點。DNX是為執行跨平台的asp.net的Web應用程序而創建的。但是它也能執行其它類型的.net應用程序,如控制台應用程序。
2. 為什麼創建DNX ?
DNX提供一個在不同平台開發和執行的環境。你可以用DNX在一種平台上面開發,然後部署到另一個平台上面去。
DNX簡化了開發跨平台的應用程序, 它負責的給CLR宿主,處理依賴和啟動你的應用程序。你可以通過輕量級的json配置文件定義你的應用程序,建立你的工具並發布它。
包的管理完全地改變了現在應用的開發,DNX使其很容易地創建和應用包。DNX提供工具安裝、創建、管理NuGet包。DNX工程簡化了利用交叉編譯為不同的構架生成不同的NuGet包。你可以直接引用NuGet包和還有依賴。你也可以創建和安全開發工具
DNX使其很容易與開源的工程一起工作,通過DNX你可以很容易地用源代碼替換掉一個已經存在的依賴。讓DNX在運行時編譯,然後你可以Debug源代碼和修改它。
3. 工程
一個DNX的工程是一個含有project.json的文件的目錄。文件夾的目錄名就是工程的名字。你可以用DNX工程創建NuGet包。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",
}
}
}
}
}
在"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版本, 安裝不同的版本轉換當前激活的版本。