0×00前段时间写的废话,年底太忙了,各种东西都在这时候凑齐,没时间学习我感兴趣的东西,所以我也没有写博客。最近工作中有个小功能要做成web应用。之前也有类似的需求。当时用WCF做WebAPI,前端用ExtJS。这次的需求不是很关键,只要能解决问题,用什么技术都无所谓,正好赶上ASP.NET5的发布,所以打算试试。在强大的VS的帮助下在Windows下一路安装就可以解决问题,但是ASP.NET5是跨平台的,所以我决定尝试在Linux下部署开发环境,这样骗别人进去会更有说服力以后坑。之前一直在用windows,只是出于好奇安装了linux,所以对linux不是很熟悉。我边做边查,边做边做。期间自然也有各种坑。折腾了一天多,但是***还在运行,这里记录下踩过的坑,以及解决和未解决的问题。0×01Windows和Ubuntu双系统之前都是用虚拟机安装Linux的。这次既然要考,就认真点。我们从硬盘预留出100G空间,按照网上的教程安装Ubuntu双系统。不过这不是本文的重点,教程也很容易找到,就不详细说了。我参考这篇文章:http://www.linuxidc.com/Linux/2012-05/59663.htm0×02安装ASP.NET5开发环境下面重点开始,主要步骤参考微软官方文档:https://docs.asp.net/en/latest/getting-started/installing-on-linux.html首先说明一下我踩的第一个坑,因为很多命令都需要用到sudo,所以我简单的sudobash把终端切换成root后,结果就是后面创建的一些文件夹全部root了,导致在没有root的情况下使用yo创建项目时出现权限错误,找了好久才发现问题。所以,为了避免不必要的麻烦,建议大家在下面操作的时候还是老老实实的sudo。在下面的屏幕截图中,您可以看到我仍然使用root,请不要这样做。1安装DNVM,首先要准备好搭建开发环境的工具。一般来说,很可能是系统自带的,不过为了以防万一,反正运行一下,反正会很快:sudoapt-getinstallunzipcurl这个命令会安装两个工具,unzip和curl,用于解压下载什么是DNVM,DNX可以参考@张山友写的这篇文章http://www.cnblogs.com/shanyou/p/4589930.html然后下载DNVM。官网文档给出了如下命令:curl-sSLhttps://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh|DNX_BRANCH=devsh&&source~/.dnx/dnvm/dnvm.sh这里用的是刚才准备的curl,不过一般系统自带的。下载后根据系统提示执行命令source~/.dnx/dnvm/dnvm.sh,至此DNVM安装完成。可以输入dnvm查看是否安装成功。2使用DNVM安装DNX首先还需要准备好安装时用到的工具sudoapt-getinstalllibunwind8gettextlibssl-devlibcurl4-openssl-devzlib1glibicu-devuuid-dev然后使用DNVM安装DNXfor.NETcorednvmupgrade-rcoreclr然后使用DNVM安装DNXforMonodnvmupgrade-rmono。安装的时候提示我的系统中没有Mono,需要安装。参考官网??文档给出的链接,依次执行以下命令:apt-keyadv--keyserverkeyserver.ubuntu.com–recv-keys3FA7E0328081BFF6A14DA29AA6A19B38D3D831EFecho"debhttp://download.mono-project.com/回购/debian喘息主要"|tee/etc/apt/sources.list.d/mono-xamarin.listapt-getupdateapt-getinstallMono-Complete3安装libuv为什么要安装这个东西,因为开发的时候需要运行本地Web服务测试,在Windows我们有IISExpress,但在Linux中没有。官方推荐的是kestrel,kestrel使用了libuv库,所以我们需要安装这个库。这个库是编译源码安装的,命令比较多。反正我是一行一行抄的。基本上,复制下一个命令时会执行上一个命令。体验还不错:)大致过程是:安装编译需要的工具,下载解压源码,编译安装,加载共享库,使新库生效。sudoapt-getinstallmakeautomakelibtoolcurlcurl-sSLhttps://github.com/libuv/libuv/archive/v1.4.2.tar.gz|sudotarzxfv--C/usr/local/srccd/usr/local/src/libuv-1.4.2sudoshautogen.shsudo./configuresudomakesudomakeinstallsudorm-rf/usr/local/src/libuv-1.4.2&&cd~/sudoldconfig至此我们就完成了ASP.NET5开发环境的安装了。这就是结局?一开始我也是这么想的,但我马上就意识到这是错误的。当我想建立一个测试项目时,我发现我无从下手。在Windows上,我都是用VS新建一个解决方案,选择Web,然后选择使用什么模板,但是Linux下没有模板,所以没办法一一手动归档。建造它。然后继续看文档发现还有YourFirstAPS.NETapplicationonXXXseries,但是里面没有Linux,所以参考Mac应该没问题。https://docs.asp.net/en/latest/tutorials/your-first-mac-aspnet.html0×03安装配置开发工具开发工具自然是visulaStudioCode,官网下载https://code.visualstudio。下载com/后解压,直接运行代码即可使用。构建项目时的模板由yeoman生成。安装yeoman需要npm,所以我们先安装npmsudoapt-getinstallnpmnpm和nodejs是相互依赖的,安装其中任何一个都会自动安装另一个。安装完成后,可以使用npminstall-gyobowergrunt-cligulp安装yeoman、bower、grunt-cli、gulp。但是问题来了,yeoman需要0.12以上的nodejs版本,而用apt-get安装的版本只有0.10,各种折腾都升级不了,包括用传说中的n,这个名字很奇怪但是据说是一个专门用于升级nodejs的工具。不。在网上搜索后,找到了这篇文章:http://my.oschina.net/tbaby/blog/412052有这么一条命令:curl--silent--locationhttps://deb.nodesource.com/setup_0.12|sudobash-打开https://deb.nodesource.com并查看它。我擦了它。我在这里运行了上面的命令。下载完成后,会提示你执行这个命令sudoapt-getinstallnodejs来安装**nodejs版本已经起来了。安装完成后已经变成了最新的0.12.9,所以使用npm安装yeoman等一系列工具就没有问题了。命令如下:npminstall-gyobowergrunt-cligulpyeoman已经安装好了,但是yeoman还没有生成ASP.NET的模板,我们也需要安装。使用以下命令安装ASP.NET模板:npminstall-ggenerator-aspnet安装完成后,我们就可以使用yeoman来构建项目了。进入我们要放置项目的目录,运行yoaspnet然后我们会看到模板选择界面,我们选择WebApplication,然后会提示我们输入应用的名称,我们先输入,然后yeoman会帮我们创建第一个目录,然后把项目的文件都创建好。使用VSCode打开第一个目录会提示缺少依赖。在项目所在目录执行如下命令dnurestore,即可解决依赖问题。如果是第一次还原,可能下载很多东西需要一段时间。完成后目录结构大概是这样的,和用VS创建的一致。该代码还将具有属性和方法的参考提示。在项目的project.json文件中,我们可以在commands中看到命令Zhongyouweb,在dependency中也可以找到对应的依赖。使用web命令启动kestrel服务。在项目所在目录执行dnxweb可以打开web服务,所以在浏览器中输入localhost:5000就可以看到我们的页面了。尝试更改HomeController中的关于消息。必须重新启动Web服务才能生效。这还不如用VS。VS可以直接更改保存,然后F5刷新就可以看到效果,就像用脚本开发一样。奇怪的是,把dnx切换成coreclr后,输入dnx什么反应也没有,网上也没找到问题所在。知道的请赐教。0×04***写的废话由于本人对linux不是很熟悉,整个过程中遇到了很多大大小小的问题。我挑了几个烦人的写下来。更不用说他们中有些蠢到会暴露智商的人了,心机就够了。不过完成后对dnvm、dnx等很多概念有了更深的理解。但是如果让我做ASP.NET5开发,我还是会选择windows。毕竟我有强大的VS。***先说一下Ubuntu的使用。之前一直在用Windows,突然切换到Ubuntu并没有想象中那么难。图形界面比较成熟,很多工具基本可以用web应用解决。开发的话可以用JetBrains系列,现在VSCode多了,只要不写WPF,问题不大。遇到问题基本上网上搜一搜,基本就能解决。你应该可以在一段时间后变得熟练。
