OSX 上初步嘗試 asp.net 5

去年微軟最令開源~~狗~~界振奮的消息就是 ASP.NET 的開放與開源這一消息了。前端

根據微軟的介紹,與我以前的一些總結,能夠看到 ASP.NET 以及 .NET 平臺會有下面幾個變化:node

  • 代碼使用 Apache 協議開源,而且託管於 Github 上。
  • 新的 C# 編譯器 Roslyn
  • 一個新的跨平臺的 CLR(對應 Java 平臺的 JVM)。
  • 新的項目組織與構建工具KVM
  • 基礎庫 corefx

這些概念都有點讓人以爲雲深霧繞,仔細研究就會發現,其實 ASP.NET 借鑑了大量 node.js 與 Ruby 社區的概念與架構。對應以下:git

KVM

對應 Ruby 社區的 RVM,與 node.js 社區的 NVM / N。能夠管理你的 ASP.NET 的執行環境(CLR),好比指定使用 coreclr 仍是 mono,以及它們的具體版本。使用上也很像。github

KPM

對應 Ruby 社區的 gen,與 node.js 社區的 npm。能夠管理你的第三方包依賴。可是實際實現上,仍是複用先用的 NuGet,包也是 NuGet 的包。可是不一樣的是,使用了 Project.json 文件格式做爲依賴聲明,而且也會自動幫你管理循環依賴。這個簡直就是直接把 npm ~~抄~~借鑑了一遍,格式都很像。web

coreclr

一個新的精簡版跨平臺的 CLR,(聽說繼承自 silverlight?),使用 C++ 實現,而且十分精簡(只有幾 M 大小),所以能夠直接在 Project.json 裏面指定使用哪一個版本,構建的時候直接在線下載。固然你們一直關心的 mono 也在這裏找到了本身的角色,你也能夠選用 mono 做爲執行環境(現階段 coreclr 尚未 production ready,mono是比較好的選擇)。固然你也可使用傳統的 CLR 來做爲運行時(如今稱爲 full .NET CLR)。shell

Roslyn

使用 C# 寫的 C# 編譯器,更加開放和組件化,主要是幫你編譯你寫的代碼以及第三方依賴的代碼。而且目測會在代碼補全和代碼重構方面發力,由於微軟並無打算把 Virtual Studio 給 Linux 和 OSX 用戶用,C# 這種靜態類型語言畢竟仍是比較依賴代碼補齊的。express

corefx

coreclr 只是一個 CLR,C# 中字符串等基本的功能仍是使用 C# 編寫的,還有不少其它的基礎庫,這部分代碼就做爲 corefx 存在了,而且絕大部分代碼都是跨平臺的。其中包括 IO,線程,Linq,集合等等一系列類庫。這樣無論你的代碼是運行在 coreclr 仍是 mono 環境中,兼容性都會有必定的保證。npm

kestrel

微軟也沒打算把 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 kestrelk 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/

相關文章
相關標籤/搜索