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/

相关文章
相关标签/搜索