阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

在Ubuntu下搭建ASP.NET 5开发环境

137次阅读
没有评论

共计 4642 个字符,预计需要花费 12 分钟才能阅读完成。

0x00 写在前面的废话

年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了。最近工作上有个小功能要做成 Web 应用,之前曾经有过类似需求,当时用的是 WCF 做 WebAPI,前端用 ExtJS。这次需求不关键,只要能解决问题就好,具体用什么技术无所谓,正好赶上 ASP.NET 5 发布,所以打算尝试一下。在 Windows 下借助强大的 VS 一路安装就解决问题了,不过 ASP.NET5 跨平台啊,决定试一下在 Linux 下部署开发环境,以后再忽悠别人入坑也更有说服力。之前一直用 Windows,只是出于好奇装过 Linux,所以对 Linux 不是很熟系,边查边做,期间自然是各种坑,折腾了一天多,不过最后也算跑起来了,在这里记录一下踩到的坑和解决的以及未解决的问题。

0x01 Windows 和 Ubuntu 双系统

之前都使用虚拟机装 Linux 的,这次既然要测试就认真一点吧,从硬盘中划出了 100G 的空间,参照网上的教程装了 Ubuntu 双系统。不过这个不是本文的重点,而且很容易就能搜到大量教程,具体就不说了。我参考的这篇文章:
http://www.linuxidc.com/Linux/2012-05/59663.htm

0x02 安装 ASP.NET 5 开发环境

下面重点开始了,主要步骤参照的微软的官方文档:
https://docs.asp.net/en/latest/getting-started/installing-on-linux.html
首先说明一下踩到的第一个坑,因为很多命令都需要用到 sudo,所以我干脆 sudo bash 把终端切换到了 root,造成的后果就是后面建立的有些文件夹都是 root 的,导致后来在非 root 下用 yo 创建项目的时候出现权限错误,花了很多时间才找到问题。所以为了少出现不必要的麻烦下面操作时建议大家还是老老实实用 sudo。下面截图中可以看到我还是用的 root,大家不要这样。

1 安装 DNVM

首先准备开发环境搭建用到的工具。一般来说很可能系统自带了,不过以防万一还是运行一下,反正也很快:

sudo apt-get install unzip curl

这个命令会安装 unzip 和 curl 两个工具,用于解压和下载
什么是 DNVM、DNX 可以参照 @张善友 的这篇文章 http://www.linuxidc.com/Linux/2016-01/127168.htm 写的很全面
然后下载 DNVM。官网文档给出了以下命令:

curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh

这里就用到刚刚准备好的 curl 了,不过一般系统都自带了。

在 Ubuntu 下搭建 ASP.NET 5 开发环境

按照系统提示在下载完后执行命令

source ~/.dnx/dnvm/dnvm.sh

这样 DNVM 就安装完成了。可以输入 dnvm 看是否安装成功。

在 Ubuntu 下搭建 ASP.NET 5 开发环境

2 使用 DNVM 安装 DNX

首先还是需要准备安装中用到的工具

sudo apt-get install libunwind8 gettext libssl-dev libcurl4-openssl-dev zlib1g libicu-dev uuid-dev

然后用 DNVM 安装 DNX for.NET Core

dnvm upgrade -r coreclr

在 Ubuntu 下搭建 ASP.NET 5 开发环境

然后使用 DNVM 安装 DNX for Mono

dnvm upgrade -r mono

在 Ubuntu 下搭建 ASP.NET 5 开发环境

安装时提示我的系统里没有 Mono,需要安装。参照官网文档给出的链接,依次执行以下命令:

apt-key adv --keyserver keyserver.ubuntu.com –recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" |  tee /etc/apt/sources.list.d/mono-xamarin.list
apt-get update
apt-get install Mono-Complete 

3 安装 libuv

为什么要安装这个东西呢,因为开发中需要运行本地 Web 服务测试啊,在 Windows 中我们有 IIS Express,可是 Linux 中没有。官方推荐使用的是 kestrel,而 kestrel 用到了 libuv 这个库,所以我们需要安装这个库。这个库是用源码编译的方式安装的,命令比较多,反正我是一行一行复制着完成的,基本上复制完下一条命令的时间上一条命令就执行完成了,体验也算不错:)大致的过程就是:安装编译需要的工具,下载并解压源代码,编译安装,加载共享库使新库生效。

sudo apt-get install make automake libtool curl
curl -sSL https://github.com/libuv/libuv/archive/v1.4.2.tar.gz | sudo tar zxfv - -C /usr/local/src
cd /usr/local/src/libuv-1.4.2
sudo sh autogen.sh
sudo ./configure
sudo make
sudo make install
sudo rm -rf /usr/local/src/libuv-1.4.2 && cd ~/
sudo ldconfig

至此我们已经完成 ASP.NET 5 开发环境的安装了。这样是不是就结束了呢?刚开始我也是这么想的,不过马上就意识到不对了。当我想建个测试工程的时候发现无法入手,在 Windows 上我都是用 VS 新建解决方案,选择 Web,然后选择用什么样的模板,可是在 Linux 下没有模板啊,总不能手动一个一个文件建立吧。然后继续看文档找到原来还有 Your First APS.NET 5 Application on XXX 系列,不过里面没有 Linux,参照 Mac 应该也没问题。
https://docs.asp.net/en/latest/tutorials/your-first-mac-aspnet.html

0x03 安装和配置开发工具

开发工具自然是 Visula Studio Code,官网下载
https://code.visualstudio.com/
下载后解压,直接运行 Code 即可使用。
建立项目时的模板是通过 yeoman 生成的。安装 yeoman 需要用 npm,于是我们先安装 npm

sudo apt-get install npm

npm 和 nodejs 是相互依赖的,安装其中任意一个都会自动安装上另外一个。安装后可以使用

npm install -g yo bower grunt-cli gulp

来安装 yeoman、bower、grunt-cli、gulp。不过问题来了,yeoman 需要 nodejs 版本在 0.12 以上,而用 apt-get 安装的版本只是 0.10,各种折腾都升级不了,包括使用传说中的 n 这个名字怪异但据说是专用于升级 nodejs 的工具都不行。在网上查来查去找到了这边文章:
http://my.oschina.net/tbaby/blog/412052
里面有这么一条命令:

curl --silent --location https://deb.nodesource.com/setup_0.12 | sudo bash -

打开 https://deb.nodesource.com 看了下我擦原来在这里

在 Ubuntu 下搭建 ASP.NET 5 开发环境
运行上面那条命令下载完成后还会提示

在 Ubuntu 下搭建 ASP.NET 5 开发环境
执行这条命令

sudo apt-get install nodejs

就可以安装最新版本的 nodejs 了。安装完成后已经成了最新的 0.12.9

在 Ubuntu 下搭建 ASP.NET 5 开发环境
这样再使用 npm 安装 yeoman 等一系列工具就没有问题了,命令如下:

npm install -g yo bower grunt-cli gulp

yeoman 是装好了,不过 yeoman 还不能生成针对 ASP.NET 的模板,这个也是需要我们安装的。使用以下命令来安装 ASP.NET 模板:

npm install -g generator-aspnet

安装完成后我们就可以使用 yeoman 建立工程了。进入我们想放置工程的目录,运行

yo aspnet

在 Ubuntu 下搭建 ASP.NET 5 开发环境

然后我们就看到了模板选择界面,我们选择 WebApplication,然后会提示我们输入应用的名称,我们输入 first,然后 yeoman 会帮我们创建 first 这个目录,然后把项目文件都建立好。

在 Ubuntu 下搭建 ASP.NET 5 开发环境

使用 VSCode 打开 first 目录会提示缺少依赖

在 Ubuntu 下搭建 ASP.NET 5 开发环境
在工程所在目录下执行下面命令

dnu restore

这样就可以解决依赖的问题。如果是第一次 restore 要下载很多东西可能会花点时间。
完成之后目录结构大概就是这样,跟用 VS 创建的一致。代码也会有属性和方法的引用提示。

在 Ubuntu 下搭建 ASP.NET 5 开发环境

在工程的 project.json 文件中我们可以看到 commands 中友 web 这个命令,在 dependency 中我们也能找到相应的依赖。使用 web 这个命令就能开启 kestrel 服务。

在 Ubuntu 下搭建 ASP.NET 5 开发环境

在工程所在目录下执行

dnx web

在 Ubuntu 下搭建 ASP.NET 5 开发环境

可以开启 web 服务,这样在浏览器中输入 localhost:5000 就能看到我们的页面了。

在 Ubuntu 下搭建 ASP.NET 5 开发环境

尝试把 HomeController 中 About 的消息改一下。必须要重启 Web 服务才能生效,这点不如用 VS 啊,VS 可以直接改了保存然后 F5 刷新就能看效果,跟用脚本开发一样。

在 Ubuntu 下搭建 ASP.NET 5 开发环境
比较奇怪的是把 dnx 切换到 coreclr 后输入 dnx 没有任何反映,网上查也没看到问题出在哪里。有知道的请赐教。

在 Ubuntu 下搭建 ASP.NET 5 开发环境

————=——-   21 月 28 日更新   ———————-

感谢 @zwmyxzs 给出的解决方案,@zwmyxzs 之前写过关于这个问题的文章:ubuntu15 coreclr。

因为 coreclr 适配的 Ubuntu14, 我用的 Ubuntu15,unbuntu14 是用的 libicu52,而 unbuntu15 是 libicu55,所以只要装个 libicu52 即可。

wget http://security.ubuntu.com/ubuntu/pool/main/i/icu/libicu52_52.1-8ubuntu0.2_amd64.deb
dpkg -i libicu52_52.1-8ubuntu0.2_amd64.deb

按照 @zwmyxzs 给的方法成功。

在 Ubuntu 下搭建 ASP.NET 5 开发环境

用 coreclr 运行服务正常

在 Ubuntu 下搭建 ASP.NET 5 开发环境

0x04 写在最后的废话

由于对 Linux 不是很熟悉,整个过程遇到了很多大大小小的问题,我挑了几个比较恼人的写了下。还有些弱智到会暴露智商的我都没提,这样才够心机。不过完成后对 dnvm、dnx 等很多概念有了更多的认识。但让我做 ASP.NET 5 开发的话我还是会选择 windows 啊,毕竟亲生的还有强大的 VS。最后再说一下 Ubuntu 的使用,之前一直使用 Windows,突然换到了 Ubuntu 感觉没有想象中的那么困难,图形界面也算比较成熟了,很多工具用 Web 应用基本可以解决。开发的话 JetBrains 系列都可以使用,加上现在还多了 VSCode,只要不写 WPF 感觉问题都不是很大。遇到问题了网上搜一下基本也都能解决,慢慢就应该能熟练了吧。

更多 Ubuntu 相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-01/127167.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4642字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中