.NET跨平台:在CentOS上編譯dnx並運行ASP.NET 5示例程序


在之前的博文中我們在 Ubuntu 上成功編譯出了 dnx ,並且用它成功運行了 ASP.NET 5 示例程序。在這篇博文中我們將 Ubuntu 換成 CentOS。

目前 dnx 的編譯需要用到 mono,所以先要安裝 mono,而且最好是用最新的 mono 源代碼進行編譯並安裝。

我們實際成功編譯的操作步驟如下(假設將 mono 安裝到 /data/mono_build 目錄):

mkdir /data/mono_build
PATH=/data/mono_build/bin:$PATH
git clone https://github.com/mono/mono.git
cd mono
./autogen.sh --prefix=/data/mono_build
make get-monolite-latest
make
make install

注:開始沒有使用 make get-monolite-latest,結果在 make 時因為找不到 mcs 而失敗。

如果想始終使用這個自己編譯的 mono,需要在 ~/.bash_profile 中添加如下的的配置:

export PATH=/data/mono_build/bin:$PATH

接下來用下面的命令安裝 dnvm :

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

然后就可以編譯 dnx 了:

# ./build.sh
Installing 'KoreBuild 0.2.1-beta6-10166'.
Successfully installed 'KoreBuild 0.2.1-beta6-10166'.
Installing 'Sake 0.2'.
Successfully installed 'Sake 0.2'.
Determining latest version
Latest version is 1.0.0-beta6-12085 
Downloading dnx-mono.1.0.0-beta6-12085 from https://www.myget.org/F/aspnetvnext/api/v2
Download: https://www.myget.org/F/aspnetvnext/api/v2/package/dnx-mono/1.0.0-beta6-12085
######################################################################## 100.0%
Installing to /root/.dnx/runtimes/dnx-mono.1.0.0-beta6-12085
Adding /root/.dnx/runtimes/dnx-mono.1.0.0-beta6-12085/bin to process PATH
Setting alias 'default' to 'dnx-mono.1.0.0-beta6-12085'

...

Attempting to build package from 'dnx-mono.nuspec'.
Successfully created package '/data/git/dnx/artifacts/build/dnx-mono.1.0.0-t150618141518.nupkg'.
info: Target package

編譯成功后,就可以用 artifacts/build/dnx-coreclr-linux-x64/bin 中的 dnx 運行 ASP.NET 5 示例程序了。

先從 GitHub 上簽出 ASP.NET 5 示例程序:

https://github.com/aspnet/Home.git

運行前准備:

1)啟用 dnvm

source /root/.dnx/dnvm/dnvm.sh

2)安裝 openssl

yum install -y openssl-devel

不然會出現下面的錯誤:

System.TypeInitializationException: The type initializer for 'libcrypto' threw an exception. 
---> System.Security.Cryptography.CryptographicException: Error occurred during a cryptographic operation.
   at Interop.libcrypto..cctor()

3)編譯並安裝 libuv(為了運行kestrel)

git clone https://github.com/libuv/libuv.git
sh autogen.sh
./configure
make
make install
ldconfig

后來遇到用最新的libuv源代碼安裝后依然找不到libuv的問題,建議下載libuv-1.4.2的源代碼進行安裝,安裝方法如下:

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
sh autogen.sh
./configure
make 
make install
rm -rf /usr/local/src/libuv-1.4.2 && cd ~/
ldconfig

不然會出現下面的錯誤:

System.InvalidOperationException: Unable to load libuv. Make sure libuv is installed and available as libuv.so.1

然后分別運行 Home/samples/latest/ 中的三個 ASP.NET 5 示例程序(運行前先要運行 dnu restore)。

1)ConsoleApp

[root@server1 ConsoleApp]# /data/git/dnx/artifacts/build/dnx-coreclr-linux-x64/bin/dnx . run
Hello World

2)HelloWeb

[root@server1 HelloWeb]# /data/git/dnx/artifacts/build/dnx-coreclr-linux-x64/bin/dnx . kestrel
Started

3)HelloMvc

[root@server1 HelloMvc]# /data/git/dnx/artifacts/build/dnx-coreclr-linux-x64/bin/dnx . kestrel
Started

在 CentOS 上也成功體驗了一下跨平台的 .NET。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM