去年微軟最令開源~~狗~~界振奮的消息就是 ASP.NET 的開放與開源這一消息了。前端
根據微軟的介紹,與我以前的一些總結,能夠看到 ASP.NET 以及 .NET 平臺會有下面幾個變化:node
這些概念都有點讓人以爲雲深霧繞,仔細研究就會發現,其實 ASP.NET 借鑑了大量 node.js 與 Ruby 社區的概念與架構。對應以下:git
對應 Ruby 社區的 RVM,與 node.js 社區的 NVM / N。能夠管理你的 ASP.NET 的執行環境(CLR),好比指定使用 coreclr 仍是 mono,以及它們的具體版本。使用上也很像。github
對應 Ruby 社區的 gen,與 node.js 社區的 npm。能夠管理你的第三方包依賴。可是實際實現上,仍是複用先用的 NuGet,包也是 NuGet 的包。可是不一樣的是,使用了 Project.json
文件格式做爲依賴聲明,而且也會自動幫你管理循環依賴。這個簡直就是直接把 npm ~~抄~~借鑑了一遍,格式都很像。web
一個新的精簡版跨平臺的 CLR,(聽說繼承自 silverlight?),使用 C++ 實現,而且十分精簡(只有幾 M 大小),所以能夠直接在 Project.json 裏面指定使用哪一個版本,構建的時候直接在線下載。固然你們一直關心的 mono 也在這裏找到了本身的角色,你也能夠選用 mono 做爲執行環境(現階段 coreclr 尚未 production ready,mono是比較好的選擇)。固然你也可使用傳統的 CLR 來做爲運行時(如今稱爲 full .NET CLR)。shell
使用 C# 寫的 C# 編譯器,更加開放和組件化,主要是幫你編譯你寫的代碼以及第三方依賴的代碼。而且目測會在代碼補全和代碼重構方面發力,由於微軟並無打算把 Virtual Studio 給 Linux 和 OSX 用戶用,C# 這種靜態類型語言畢竟仍是比較依賴代碼補齊的。express
coreclr 只是一個 CLR,C# 中字符串等基本的功能仍是使用 C# 編寫的,還有不少其它的基礎庫,這部分代碼就做爲 corefx 存在了,而且絕大部分代碼都是跨平臺的。其中包括 IO,線程,Linq,集合等等一系列類庫。這樣無論你的代碼是運行在 coreclr 仍是 mono 環境中,兼容性都會有必定的保證。npm
微軟也沒打算把 IIS 跨平臺到 Linux 和 OSX,所以有了 kestrel 這個 HTTP Server,基於 libuv。說是給開發環境用,可是估計之後也能達到線上服務的強度。json
以上概念雖然多,可是 asp.net 5 安裝和使用起來並不複雜,只要安裝好 KVM 這一個工具就行了。bash
KVM 的項目是 https://github.com/aspnet/Home (這個項目名字真的有點讓人摸不着頭腦,直接叫 KVM 或者 K 不就行了),實際上就是幾個 shell 腳本(bash / powershell)。
如下內容基於 KVM beta3
OSX 下直接用 homebrew 安裝就好,微軟已經作好了brew tap,之後正式 release 應該會提交給 homebrew。
bashbrew tap aspnet/k brew install kvm
安裝時會有個 postinstall 的過程,自動幫你執行了 kvm upgrade
,ASP.NET 相關文件很 Unix 地幫你放在了 ${HOME}/.k/ 目錄下,而且自動使用 mono 做爲 runtime:
bashtree ~/.k /Users/asaka/.k ├── alias │ └── default.alias └── runtimes └── kre-mono.1.0.0-beta3 ├── bin │ ├── Microsoft.CodeAnalysis.CSharp.Desktop.dll │ ├── Microsoft.CodeAnalysis.CSharp.dll │ ├── Microsoft.CodeAnalysis.Desktop.dll │ ├── Microsoft.CodeAnalysis.dll │ ├── Microsoft.Framework.ApplicationHost.dll │ ├── Microsoft.Framework.Runtime.Loader.dll │ ├── Microsoft.Framework.Runtime.Roslyn.Common.dll │ ├── Microsoft.Framework.Runtime.Roslyn.dll │ ├── Microsoft.Framework.Runtime.dll │ ├── Microsoft.Net.Http.Client.dll │ ├── Newtonsoft.Json.dll │ ├── System.Collections.Immutable.dll │ ├── System.Reflection.Metadata.dll │ ├── k │ ├── klr │ ├── kpm │ ├── kre.host.dll │ ├── kre.mono.managed.dll │ └── lib │ ├── Microsoft.Framework.DesignTimeHost │ │ └── Microsoft.Framework.DesignTimeHost.dll │ ├── Microsoft.Framework.PackageManager │ │ └── Microsoft.Framework.PackageManager.dll │ └── Microsoft.Framework.Project │ └── Microsoft.Framework.Project.dll ├── kre-mono.nuspec └── package └── services └── metadata └── core-properties └── 5d2fd91bec5d411ca81c8c3df4d03749.psmdcp 12 directories, 24 files
有一點很不 Unix 的就是,kvm 實現成了一個 shell 函數,而不是一個可執行文件,所以你每次使用的時候都要 source kvm.sh
一下(貌似 rvm 也是這樣?)。能夠在 .zshrc 一類的地方幹這件事。
而後 kvm install
能夠安裝其餘版本的 runtime,也會裝到 ${HOME}/.k/ 目錄下。kvm use
能夠選擇某個 runtime 做爲當前 runtime。還有一系列 upgrade alias
的命令,和 rvm/nvm 差很少。roslyn 也包括在 kvm runtime 之中,不過沒有可執行文件來直接啓動。
kvm 安裝的 runtime 裏面也包含 kpm、klr 和 k 三個命令行工具。klr 其實是當前的 CLR,這裏其實就是啓動了 mono。kpm 實際上是 NuGet,k 相似於構建工具,幫你設置好環境變量,編譯代碼,而且幫你啓動你的代碼。
剛纔 KVM 的那個 repo 裏面還有幾個 sample,能夠 clone 下來本身跑着玩。不過目前在默認 runtime 之下,除了 ConsoleApp 以外我這裏都跑不起來,估計是好久沒維護,依賴出了問題什麼的。
跑項目的時候,須要使用 kpm restore
一下安裝依賴。對於 ConsoleApp 類的項目,直接 k run
就能夠運行你的代碼,就是直接編譯好了之久運行 Main
函數。
web 類的項目,須要使用 k web
來使用內置的 HTTP Server 運行。可是 sample 的那幾個例子都跑不通。這裏還使用 k kestrel
來啓動 kerstrel 跑。
仔細觀察就能夠發現,如今若是寫一個命令行工具,那隻要寫好 Project.json 來指定相關依賴,就能夠任意想以本身的方式來組織代碼了。可是對於 asp.net 項目,或者其餘相似的項目,雖然如今已經沒有了 web.config ,可是憑空去手敲出來一個項目框架仍是很繁瑣的。asp.net 中增長 Controller 一類的工做也是很繁瑣的,以前 Virtual Studio 能夠幫助咱們作這些工做。
因此咱們須要一個腳手架工具,這個在 rails 有比較完美的解決方案,rails 自己就能夠幫咱們作這些事情。後來 node.js 社區的 yo 項目把這個功能~~抄~~借鑑了去,能夠生成各類前端以及 node.js 項目,而且 yo 也一直沒有限定本身只在前端和 JS 社區,自己能夠經過寫新的 generator 來支持各類類型的項目。
所以就有了 generator-aspnet 這個項目。這個項目屬於 OminiSharp 組織,非微軟官方,可是發起人確實微軟官方,因此你知道我在說什麼。
裝上 yo 和 generator-aspnet 就能夠很方便的生成 asp.net 以及使用各類腳手架功能了。
bashnpm install -g yo npm install -g generator-aspnet
嘗試一下:
bashyo aspnet _-----_ | | .--------------------------. |--(o)--| | Welcome to the | `---------´ | marvellous ASP.NET 5 | ( _´U`_ ) | generator! | /___A___\ '--------------------------' | ~ | __'.___.'__ ´ ` |° ´ Y ` ? What type of application do you want to create? (Use arrow keys) ❯ Empty Application Console Application Web Application Web API Application Nancy ASP.NET Application Class Library
如今支持的項目類型也比較完善,甚至還支持 Nancy 這個很像 sinatra 和 express 的輕量級 .net web 框架。
項目建立完成以後,能夠進入項目根目錄,若是是 Web Application(也就是之前的 MVC 框架),這樣運行(restore以前最好先用 npm 裝上 bower 和 grunt-cli,yo 生成出來的項目是依賴這兩個來構建前端的,restore 過程當中會執行構建過程):
bashkpm restore kpm build k kestrel
固然不知爲什麼,我這裏用k kestrel
和 k web
都跑不起來,應該仍是由於 Beta 的緣由吧。不過能夠觀察一下項目目錄結構,發現構建前端的 grunt 和 bower 都已經配置好了,而且默認啓用 Razer 作模板引擎,也使用了 Entity Framework 做爲 ORM 框架,十分完善。
另外看 generator-aspnet 的文檔,有以下腳手架:
aspnet:MvcController aspnet:MvcView aspnet:WebApiContoller aspnet:Class aspnet:StartupClass aspnet:BowerJson aspnet:CoffeeScript aspnet:Config aspnet:Gulpfile aspnet:HTMLPage aspnet:JavaScript aspnet:JScript aspnet:JSON aspnet:PackageJson aspnet:TextFile aspnet:TypeScript
很好很強大。
歡迎到個人博客查看更多相關信息: http://aisk.me/