1. 程式人生 > >.NET跨平臺:在Ubuntu上用自己編譯的dnx執行ASP.NET 5示例程式

.NET跨平臺:在Ubuntu上用自己編譯的dnx執行ASP.NET 5示例程式

在 Linux Ubuntu 上成功編譯 dnx 之後,會在 artifacts/build/ 資料夾中生成 dnx-coreclr-linux-x64/ 與 dnx-mono/ 這2個資料夾,前者是基於 coreclr 的 dnx ,後者是基於 mono 的 dnx 。

這篇博文中我們將使用基於 coreclr 的 dnx 執行 ASP.NET 5 示例程式,而 dnx 以及它所需的一切都在 dnx-coreclr-linux-x64/ 的 bin/ 資料夾中,所以只需通過下面的命令就可以執行一個 ASP.NET 5 應用程式。

/data/git/dnx/artifacts/build/dnx-coreclr-linux-x64/bin/dnx . kestrel

下面我們分別通過三種類型(Console/Web/MVC)的 ASP.NET 5 示例程式實際體驗一下。示例程式來自 github.com/aspnet/Home/ 。

(一)

第一個示例程式是 ConsoleApp(ASP.NET 5 控制檯應用程式)

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Hello World");
    }
}

用以下命令執行這個 ASP.NET 5 控制檯應用程式(無需Web伺服器):

cd /data/git/Home/samples/latest/ConsoleApp
dnu restore
/data/git/dnx/artifacts/build/dnx-coreclr-linux-x64/bin/dnx . run

執行成功!結果如下:

Hello World

(二)

第二個示例程式是 HelloWeb (未使用 MVC 的 ASP.NET 5 Web 應用程式)

using Microsoft.AspNet.Builder;

namespace HelloWeb
{
    public class Startup
    {
        
public void Configure(IApplicationBuilder app) { app.UseStaticFiles(); app.UseWelcomePage(); } } }

用以下命令執行程式(需要Web伺服器,用的是Kestrel)

cd /data/git/Home/samples/latest/HelloWeb
dnu restore /data/git/dnx/artifacts/build/dnx-coreclr-linux-x64/bin/dnx . kestrel

執行失敗!出現下面的錯誤:

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

這是由於 Unbuntu 上沒有安裝 libuv,而 Kestrel 是基於 libuv 的。所以先要安裝 libuv,安裝的命令如下:

git clone https://github.com/libuv/libuv.git
sh autogen.sh
./configure
make
make install
sudo ln -s /usr/local/lib/libuv.so /usr/lib/libuv.so.1

繼續用 dnx . kestrel 命令執行,這次執行成功!

# /data/git/dnx/artifacts/build/dnx-coreclr-linux-x64/bin/dnx . kestrel
Started

然後通過瀏覽器訪問“主機名:埠號”,就會看到 HelloWeb 輸出的預設頁面:

 (三)

第二個示例程式是 HelloMvc (基於 ASP.NET 5 的 MVC 示例程式) 

using Microsoft.AspNet.Builder;
using Microsoft.Framework.DependencyInjection;

namespace HelloMvc
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseErrorPage();

            app.UseMvcWithDefaultRoute();

            app.UseWelcomePage();
        }
    }
}

用以下命令執行這個 ASP.NET 5 MVC 示例應用程式:

cd /data/git/Home/samples/latest/HelloMvc
dnu restore
/data/git/dnx/artifacts/build/dnx-coreclr-linux-x64/bin/dnx . kestrel

執行成功!

# /data/git/dnx/artifacts/build/dnx-coreclr-linux-x64/bin/dnx . kestrel
Started

然後用瀏覽器訪問,就可以看到 MVC 輸出的頁面:

三個 ASP.NET 5 示例程式執行成功!

雖然這三個示例程式只是微不足道的小玩具,但將它們在最新的 .NET 跨平臺的三駕馬車 coreclr/corefx/dnx 上執行起來,可以實際體會一下 .NET 跨平臺正在一步一步向前。而且基於 .NET 跨平臺的這一微步,我們可以嘗試在上面執行一些很簡單的站點。