在將“.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
文章列表