在将“.NET跨平台之旅”示例站點about.cnblogs.com從ASP.NET 5 RC1更新至ASP.NET Core 1.0之後,我們有一個難以抗拒的沖動 —— 體驗一下 dotnet cli 引入的一個最激動人心的特性 —— 将 .NET 程式編譯為本地(native)機器碼。
在将“.NET跨平台之旅”示例站點 about.cnblogs.com 從 ASP.NET 5 RC1 更新至 ASP.NET Core 1.0 (博文連結)之後,我們有一個難以抗拒的沖動 —— 體驗一下 dotnet cli 引入的一個最激動人心的特性 —— 将 .NET 程式編譯為本地(native)機器碼。對應于我們的示例站點,就是将 ASP.NET Core 應用程式編譯為本地機器碼。
如何編譯呢?非常簡單,隻需運作下面的指令:
dotnet build --native
編譯輸出如下:
Project AboutUs (.NETStandardApp,Version=v1.3) will be compiled because some of its inputs were newer than its oldest output.
Compiling AboutUs for .NETStandardApp,Version=v1.3
Compilation succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:02.7095915
Input Assembly: /data/AboutUs/bin/Debug/netstandardapp1.3/AboutUs.dll
然後看一下 bin/Debug/netstandardapp1.3/ 檔案夾中的内容:
ubuntu.14.04-x64 檔案夾中的内容就是 native build 的輸出,AboutUs 是可執行檔案。
接下來,激動人心的時刻就要到了 —— 我們将以 AboutUs 這個編譯為本地機器碼的可執行檔案運作 ASP.NET Core 站點。
在運作之前,需要做2個小小的準備工作:
1)為了與示例站點源代碼所在的項目檔案夾劃清界線,我們建立了一個 about.cnblogs.com 檔案夾,并将 ubuntu.14.04-x64 檔案夾中的所有檔案複制到這個檔案夾。
2)将 config.json 檔案複制到 about.cnblogs.com 檔案夾中,示例站點有資料庫操作(資料庫用的是SQL Server),config.json 中存放着資料庫連接配接字元串。
做好準備工作,演出就開始了!我們在 about.cnblogs.com 檔案夾中運作下面的指令:
./AboutUs
控制台輸出如下:
dbug: Microsoft.AspNetCore.Hosting.Internal.WebHost[3]
Hosting starting
dbug: Microsoft.AspNetCore.Hosting.Internal.WebHost[4]
Hosting started
Hosting environment: Production
Application base path: /data/websites/about.cnblogs.com
Now listening on: http://*:8001
Application started. Press Ctrl+C to shut down.
太帥了!站點成功運作起來了!
浏覽器通路站點,一切正常。你現在看到的 about.cnblogs.com 就是在 Linux Ubuntu 伺服器上以 native 方式運作的。
以前隻能在做夢時才敢想想的事情,現在正在逐漸成為現實。
注:我們在用 dotnet build --native 指令編譯時,有時 ubuntu.14.04-x64 檔案夾中無輸出,可以改用
dotnet build --native --no-incremental 指令解決這個問題。
【更新】
後來出現502錯誤與.NET Core沒有關系,是因為沒有以背景服務的方式運作指令,ssh會話一斷開,程序就結束了。現已改為用下面的指令運作:
screen -d -m -s "AboutUs" /data/websites/about.cnblogs.com/AboutUs