擁抱.NET Core,如何開發跨平臺的應用並部署至Ubuntu運行

以前寫了一篇博文宣佈Rabbit Rpc跨平臺了「擁抱.NET Core,跨平臺的輕量級RPC:Rabbit.Rpc」,在過程當中嘗試瞭如何編寫支持跨平臺的類庫與應用程序,也嘗試了在linux上的運行,今天特此將過程當中的一些經歷記錄下來,方便後人。html

安裝開發環境

本人用Windows環境就直接用Visual Studio了,固然也能夠用記事本或Visual Code。linux

.NET Core開發要求json

  • Visual Studio 2015 Update3
  • .NET Core 1.0 for Visual Studio(DotNetCore.1.0.0-SDK.Preview2)

    具體的移步:https://www.microsoft.com/net/core#windowsubuntu

    編碼

    新建立一個.NET Core控制檯項目

    image

    項目模板說明

  • Class Library(基礎類庫)
  • Console Application(控制檯應用程序)
  • ASP.NET Core(Web應用程序)

    上方的.NET Framework4.5 你們再熟悉不過了,可是.NET Core其實與.NET Framework無關,相信後續的SDK版本會解決這個問題。如今只能選擇.NET Framework 4.5或以上才能夠看到3個類型的項目。windows

    鍵入一些代碼

    image

    運行

    image

    談一談發佈

    .NET Core分爲兩種應用類型,分別是:app

  • Portable applications(便攜應用)
  • Self-contained application(自宿主應用)

    Portable applications(便攜應用)

    這個相似於現有的.NET Framework方式,須要目標主機安裝有.NET Core的運行時,對比如今的狀況就是須要機器安裝.NET Framework。框架

    對於這種方式我想你們都很熟悉了,微軟有放出不一樣平臺(操做系統)上的.NET Core運行時。性能

    .NET Core運行時與.NET Framework是同級別但不是同一個。測試

    優勢

  • 易移植
  • 發佈的內容較小

    缺點

  • 須要安裝.NET Core運行時

    Self-contained application(自宿主應用)

    噹噹噹,這種方式很酷,也是我最喜歡的一種發佈方式。ui

    這種方式會將運行時與程序共同打包,也就意味着目標機器不須要裝.NET Core運行時。

    優勢

  • 部署簡單

    缺點

  • 發佈內容較大

    備註

    這種方式不是以前所說的.NET Native,也不會有性能提高,由於咱們的程序仍是IL,仍是須要CLR中的JIT進行編譯,只是將Core CLR打包進去了而已,能夠理解爲提供了綠色版的.NET Core運行時,而後提供了一個對應平臺的可執行程序來進行加載調用。

    參考資料:https://docs.microsoft.com/zh-cn/dotnet/articles/core/app-types

    發佈應用

    使用(CLI)命令行發佈

    發佈:Portable applications(便攜應用)

    運行「CMD」(命令提示符)

    定位到項目路徑

    image

    使用發佈命令

    image

    這樣就發佈完成了。

    ps:若是發佈失敗請先執行dotnet restore或使用Visual Studio進行生成。

    dotnet publish有許多可選項,格式以下:

    image

    -f, --framework [FID]

    指定運行框架,如:netcoreapp1.0,net45,net451等,具體由「project.json」中的「framework」節點指定。

    -r, --runtime [RID]

    指定應用程序運行時(自宿主應用),這種方式將會把指定平臺的Core CLR打包進去。

    格式:[os].[version]-[arch]

    例子:win7-x6四、win7-x8六、win10-x6四、win10-x8六、rhel.7.0-x6四、ubuntu.14.04-x6四、osx.10.10-x64等。

    參考資料:https://docs.microsoft.com/zh-cn/dotnet/articles/core/rid-catalog

    -b, --build-base-path [DIR]

    指定輸出路徑根。

    -o, –output

    指定具體的輸出路徑,會與「-b」命令配合。

    默認路徑:

  • Portable applications:./bin/[configuration]/[framework]//app
  • Self-contained application:./bin/[configuration]/[framework]/[runtime]/app

    --version-suffix [VERSION_SUFFIX]

    替換在「project.json」文件中依賴包版本號中的*。

    -c, --configuration [Debug|Release]

    發佈配置,這個你們都懂,默認爲:Debug。

    參考資料:https://docs.microsoft.com/zh-cn/dotnet/articles/core/tools/dotnet-publish

    使用Visual Studio發佈

    右鍵發佈,可選參數請參考上面的。

    image

    發佈:Self-contained application(自宿主應用)

    修改「project.json」

    刪除「Microsoft.NETCore.App」節點中"type" : "platform"的配置

    增長「runtime」節點中對應的平臺

    修改後的「project.json」以下:

    image

    在使用CLI或Visual Studio進行發佈

    CLI命令:

    dotnet restore

    dotnet publish –r [win10-x64 | ubuntu.16.04-x64] –c release

    image

    image

    參考資料:https://docs.microsoft.com/zh-cn/dotnet/articles/core/deploying/index#self-contained-applications

    運行

    Portable applications(便攜應用)

    cd到發佈目錄,而後運行如下命令

    dotnet ConsoleApp1.dll

    image

    Self-contained application(自宿主應用)

    直接打開可執行文件

    Windows

    下直接雙擊「ConsoleApp1.exe」你懂的。。

    Ubuntu

    安裝Ubuntu

    目前官方給出的支持版本有

  • Ubuntu 14.04 LTS(長時間支持版本)
  • Ubuntu 15.04 LTS(長時間支持版本) 這個我沒有發佈成功
  • Ubuntu 16.04 LTS(長時間支持版本)

    做者採用的是16.04,鏡像文件在1.4gb左右。

    下載地址:http://releases.ubuntu.com/16.04/ubuntu-16.04-desktop-amd64.iso

    做者使用系統自帶的Hyper-V做爲虛擬機軟件。

    安裝的具體流程不貼了,網上不少,說個注意點。

    使用Hyper-V安裝Ubuntu時最後一步會卡住好久,你們強制重啓便可(最好等個幾分鐘在強制重啓),固然也能夠等,好久好久以後他會好的。

    QQ截圖20160708141354

    (大體意思是:請刪除安裝媒介,按回車)然而我早已經分離虛擬光驅了。。

    拷貝發佈內容

    方式不定,我用的是虛擬光驅鏡像。

    image

    image

    運行自宿主應用

    設置執行程序的執行權限

    image

    使用命令行執行

    image

    是否是很酷,沒有安裝任何東西,便可直接運行。

    運行便攜式應用

    首先得安裝.NET Core運行環境

    參考資料:https://www.microsoft.com/net/core#ubuntu

    安裝完成以後,輸入「dotnet --info」來測試是否安裝成功。

    image

    OK,接下來咱們來運行。

    定位到目錄,運行「dotnet ConsoleApp1.dll」

    image

    ps:記住不要用 「dotnet run」這個命令,否則會提示找不到「project.json」,輸入以後會執行一段東西由於一些緣由沒有截到圖。

    接下來?

    接下來我會分享同樣在.NET Core如何編寫支持多種平臺的類庫與應用程序。

    好比寫一個類庫同時支持4.5,和.NETStandard 1.6等。

  • 相關文章
    相關標籤/搜索