在Linux上运行ASP.NET vNext
最新的ASP.NET vNext完全开源且可以跨多个平台运行,在Windows环境下我尝试了下,几乎没花什么工夫就跑起了Sample,而在Linux环境下则要多花了不少时间,所以特别记录下整个过程,希望对其他想要尝鲜的人有所帮助。
运行环境
Ubuntu Server 14.04
VirtualBox
Mono >= 3.4.1
*由于Ubuntu库中的Mono版本比较陈旧,满足不了最低要求,所以第一步要做的就是安装最新版本的Mono。
安装Mono
1. 首先从GitHub上取得mono代码:git clone git://github.com/mono/mono.git
*未安装过git程序的话,你首先需要在Ubuntu中执行sudo apt-get install git
命令。
2. 这一步有点奇怪,编译新版本的mono需要旧版本的支持,如果未安装过mono的话,请先在Ubuntu执行sudo apt-get install mono-complete
命令。
3. 进入mono目录,编译程序:
cd mono
./autogen.sh --prefix=/usr/local
make
*这里可能需要预先安装其它的程序,比如autoconf,libtool,g++,make等等。
4. 安装:make install
5. 执行mozroots --import --sync
命令以避免认证问题。
6. 通过mono –version
命令确认所安装的mono是最新的版本。
安装KRE
只需要简单的一句命令:
curl https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh && kvm upgrade
kvm upgrade
命令会自动下载最新的KRE包, 将其解压到.kre/packages目录下并添加bin文件夹路径至你的环境变量PATH中。
*因为涉及解压的操作,所以unzip程序必须预先安装:sudo apt-get install unzip
安装完成后可以通过kpm –version
命令检查是否安装正确。
Hello World
完成所有准备工作之后,即可以尝试运行第一个程序了。按照传统,第一个程序应该是“Hello World!”
1. 首先建立HelloWorld文件夹:mkdir HelloWorld
2. 进入文件夹后:cd HelloWorld
,再建立两个文件Program.cs和project.json。
3. 编辑这两个文件(推荐使用vim),在Program.cs加入以下代码:
using System; public class Program { public static void Main() { Console.WriteLine("Hello World!"); } }
而在project.json文件中加入下列配置:
{ "dependencies": { "System.Console": "4.0.0.0" }, "configurations": { "net45": {}, "k10": {} } }
4. 执行kpm restore -s https://www.myget.org/F/aspnetvnext/
命令。
*该命令会根据配置文件中的描述,从指定nuget仓库中取得必要的依赖项。
5. 运行程序:k run
以上步骤都正确的话,应该就能在shell中看到“Hello World!”的显示。
简单的MVC
接着试一个较复杂的程序,代码可以直接从GitHub中取得。
git clone git://github.com/aspnet/Home.git
取得HelloMvc代码并不能直接使用,因为其指定的Web服务器在Linux中并不存在,我们还需要添加一个工程用于生成Web服务器。
从https://github.com/Alxandr/Nowin.vNext/tree/master/src中取得Nowin.vNext文件夹,将其置于与HelloMvc同级的目录下。
然后修改HelloMvc的project.json文件:
{ "version": "0.1-alpha-*", "dependencies": { "Microsoft.AspNet.Mvc": "0.1-alpha-*", "Nowin.vNext": "" }, "commands": { "web": "Microsoft.AspNet.Hosting --server Nowin.vNext" }, "configurations": { "net45": { "dependencies": { "System.Runtime": "", "System.ComponentModel.DataAnnotations": "" } }, "k10": {} } }
这样运行kpm restore
命令下载依赖项后,执行k web
命令,就可以在浏览器中查看网页了。
*其实以上执行时还是会有错误,需要把Startup.cs文件中的app.UseErrorPage();
与app.UseWelcomePage();
语句注释掉才行。猜测是Nowin.vNext服务器中未实现所产生的问题。
客户端访问
因为在这个试验中所用的Ubuntu Server未安装桌面环境,所以也就不能在虚拟机中查看以上的结果。不过既然虚拟机已然成了服务端,不妨就把宿主机当成客户端吧。
在VirtualBox的网络设置中将连接方式改成桥接网卡,这样宿主机就可以通过IP地址访问虚拟机。
上一例子的Web服务器端口号为8080,所以在宿主机的浏览器上输入“虚拟机ip地址:8080”并轻击回车后也就能看到最终的成果了。