Ubuntu 14.04 LTS 下 APACHE 支持 ASP.NET MVC5

8 篇文章 0 订阅
2 篇文章 0 订阅

因为最近在上一个移动互联网项目,但是对于外包公司的PHP所采用的ZF(2.0.5)框架的效率觉得真的无法忍受,所以想着以后的接口采用自己熟悉的 ASP.NET 框架来写,

也因此,就有这一篇文章;

参考文档: http://www.bgsoftfactory.net/run-asp-net-mvc-4-with-mysql-on-linux/  


步骤:

sudo su   -- 切换到管理员模式

apt-get update  -- 升级已经安装的软件包到最新版本

apt-get dis-upgrade --升级版本到最新(主要升级内核到最新)


apt-get install build-essential git autoconf libtool automake unzip   --安装必要的软件包;
mkdir ~/monobuild

cd  ~/monobuild          -- 在 home 目录下建立 monobuild 目录;


下载 libgdipls 最新版本并解药到 libgdiplus 目录

wget https://github.com/mono/libgdiplus/archive/master.zip 

mv master.zip libgdiplus.zip 

unzip  libgdiplus.zip

mv  libgdiplusmaster libgdiplus

--继续安装 编译 libgdiplus 必要的包;
apt-get install libglib2.0-dev libjpeg-dev libtiff4-dev libpng12-dev libgif-dev libexif-dev libx11-dev libxrender-dev libfreetype6-dev libfontconfig1-dev gettext libcairo2-dev

cd libgdipls
./autogen --prefix=/usr
make
make install    -- 如果,你看到 Libraries have been installed in:  /usr/lib 之类的字样,表示 libgdiplus 成功编译并复制到 /usr/lib 目录;

cd ~/monobuild  --回到主目录准备安装 mono;

wget  https://github.com/mono/mono/archive/master.zip  --下载 mono 的最新版本;不过这个步骤看你的网络速度,我单位的测试服务器很快,云主机就慢的一笔;


安装编译所需要的软件包(根据 http://www.mono-project.com/docs/compiling-mono/linux/ 这个网页,基于 debian 的 linux需要安装这些软件包) ,
这个貌似会把 mono 的开发包给装到  /usr/bin 目录下,

sudo apt-get install git autoconf libtool automake build-essential mono-devel gettext这个时候运行 mono -V ,应该会提醒你 mono安装的是 3.2.8;which mono 你可以看到 mono 命令位于 /usr/bin 目录下;
mv master.zip mono.zip
unzip  mono.zip
mv   monomaster mono
cd mono
./autogen.sh --prefix=/usr   -- 产生 make 文件,根据上面 which 的结果, 我们需要指定 prefix=/usr 以便 我们新编译的 mono 能够覆盖旧的 mono 版本;
make              --  这一步就看你的机器了,不过可以负责任的说一句,快不le;
make install   -- 好了,如果没有错误,mono 这个时候应该已经安装到了 /usr/bin 目录,替换了之前 mono-devel 软件包安装的版本;
现在你可以试试看看 
mono -V 是什么版本; 这个时候应该是 4.2.0.027 ; (当然,你下载的时候可能已经是另外一个更新的版本了);



2.  编译 mono 的时候,根据 mono 的install 说明,在你 make 之前,
如果你没有一个可以工作的mono安装环境,你需要下载一个小小的 mono 编译器;l
简单运行如下命令即可以在你的本机安装一个 足够编译 mono 源代码的 mono编译器;
简单来说,就是在 编译 mono 最新的源代码的时候,你需要一个mono编译器
( 如果你能够理解用 c编译器 来对 C编译器源代码 进行编译产生一个新的 C编译器的话,理解这句话应该不难)

make get-monolite-latest
 3. mono的安装,配置根据 git 上 mono 的说法,建议你指定 --prefix=/usr,  参考文档中写的是 /usr/local ,
    参考文档中说的应该是有问题的,因为死活说找不到 gmcs, 但指定  --prefix=/usr 就没有问题;
    注意,make 之前先运行 下面的指令;
make get-monolite-latest

    对 mono 进行 make 的时候,直接运行 make 即可,不需要像下面一样运行;
     make EXTERNAL_MCS=${PWD}/mcs/class/lib/monolite/gmcs.exe 


4. 安装 xps 的时候,最新版本会报一个 gmcs not found 的错误,

    直接在 cp /usr/local/bin/mcs  /usr/local/bin/gmcs 即可以解决此问题;


5.  在 xsp 下部署 MVC5,  文档中的例子  https://github.com/BernardG/AspInfoMvc  直接下载下来,然后到这个目录下运行, xsp4 什么问题都没有;

    但是,如果你用 VS2015 产生一个新的项目(注意,创建项目的时候个人认证 环境),然后部署上去的时候,你会发现一个稀奇的错误, 
     /bin\roslyn\csc.exe 运行时错误,

    

    扑街的问题, VS2015 为了支持 roslyn 编译扩充,新建立的项目自动在 bin 建立了一个 roslyn 目录,下面包含了一个 csc.exe 和 vbc.exe  两个编译器和一堆编译优化的优化的 dll, 这个目录即使你不上传,一样会报   /bin\roslyn\csc.exe 运行时之类的错误 ;
     找到 项目文件, 也就是 csproj 文件,
    删除下面两行,
     <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />,
  手动清理bin目录,重新编译项目,你会发现 roslyn 目录已经不会产生,

      把整个 web项目目录上传到 ubuntu, 然后在 web 目录下运行 xsp4, 貌似什么问题都没有;


6. 安装和配置 mod_mono 
   

   因为,我的 asp.net MVC 需要在一个虚拟目录下运行,主目录文档还是走的 PHP的MVC,  不过,这个也不麻烦,还是根据参考文档,


 在 mod_mono.conf 最后面增加如下几行,

Alias /test "/var/www/WebApplication3"
MonoServerPath mvctest "/usr/local/bin/mod-mono-server4"
MonoDebug mvctest true
MonoApplications mvctest "/test:/var/www/WebApplication3"
MonoSetEnv mvctest MONO_IOMAP=all
<Location "/test">
                Allow from all
                Order allow,deny
                MonoSetServerAlias mvctest
                SetHandler mono
                SetOutputFilter DEFLATE
                SetEnvIfNoCase Request_URI ".(?:gif|jpe?g|png)$" no-gzip dont-vary
</Location>

OK, 一切搞定,不过也居然花了两天时间;

不过,暂时还没有支持 MYSQL, 根据,作者的说法, MySQL Connector/Net provider 驱动还不支持 EF6 框架;而 mono 只支持 EF6 (因为  EF6才开始开源),

http://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html  但根据这篇文章的说法, MySQL Connector/Net provider 从 6.8起开始支持 EF6了,所以,估计问题不大;

明天拿作者的例子试试看;

就这样了,至于 centos 6.5 , 大家就不要问我了,就是因为 centos 6.5搞不定,我才决定把服务器改成使用 UBUNTU 14.04 LTS的;

    



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值