歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 擁抱.NET Core,如何開發跨平台的應用並部署至Ubuntu運行

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

日期:2017/3/3 11:31:38   编辑:Linux技術
之前寫了一篇博文宣布Rabbit Rpc跨平台了“擁抱.NET Core,跨平台的輕量級RPC:Rabbit.Rpc”,在過程中嘗試了如何編寫支持跨平台的類庫與應用程序,也嘗試了在linux上的運行,今天特此將過程中的一些經歷記錄下來,方便後人。

安裝開發環境

本人用Windows環境就直接用Visual Studio了,當然也可以用記事本或Visual Code。
.NET Core開發要求
Visual Studio 2015 Update3 .NET Core 1.0 for Visual Studio(DotNetCore.1.0.0-SDK.Preview2) 具體的移步:https://www.microsoft.com/net/core#windows

編碼

新創建一個.NET Core控制台項目




項目模板說明

Class Library(基礎類庫) Console Application(控制台應用程序) ASP.NET Core(Web應用程序) 上方的.NET Framework4.5 大家再熟悉不過了,但是.NET Core其實與.NET Framework無關,相信後續的SDK版本會解決這個問題。現在只能選擇.NET Framework 4.5或以上才可以看到3個類型的項目。

鍵入一些代碼




運行




談一談發布

.NET Core分為兩種應用類型,分別是:
Portable applications(便攜應用) Self-contained application(自宿主應用)

Portable applications(便攜應用)

這個類似於現有的.NET Framework方式,需要目標主機安裝有.NET Core的運行時,對比現在的情況就是需要機器安裝.NET Framework。
對於這種方式我想大家都很熟悉了,微軟有放出不同平台(操作系統)上的.NET Core運行時。
.NET Core運行時與.NET Framework是同級別但不是同一個。

優點

易移植 發布的內容較小

缺點

需要安裝.NET Core運行時

Self-contained application(自宿主應用)

當當當,這種方式很酷,也是我最喜歡的一種發布方式。
這種方式會將運行時與程序共同打包,也就意味著目標機器不需要裝.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”(命令提示符)
定位到項目路徑



使用發布命令



這樣就發布完成了。
ps:如果發布失敗請先執行dotnet restore或使用Visual Studio進行生成。
dotnet publish有許多可選項,格式如下:



-f, --framework [FID]
指定運行框架,如:netcoreapp1.0,net45,net451等,具體由“project.json”中的“framework”節點指定。
-r, --runtime [RID] 指定應用程序運行時(自宿主應用),這種方式將會把指定平台的Core CLR打包進去。 格式:[os].[version]-[arch] 例子:win7-x64、win7-x86、win10-x64、win10-x86、rhel.7.0-x64、ubuntu.14.04-x64、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發布

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



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

修改“project.json”

刪除“Microsoft.NETCore.App”節點中"type" : "platform"的配置
增加“runtime”節點中對應的平台
修改後的“project.json”如下:



在使用CLI或Visual Studio進行發布
CLI命令:
dotnet restore
dotnet publish –r [win10-x64 | ubuntu.16.04-x64] –c release






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

運行

Portable applications(便攜應用)

cd到發布目錄,然後運行以下命令
dotnet ConsoleApp1.dll



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時最後一步會卡住很久,大家強制重啟即可(最好等個幾分鐘在強制重啟),當然也可以等,很久很久之後他會好的。



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

拷貝發布內容

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






運行自宿主應用

設置執行程序的執行權限



使用命令行執行



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

運行便攜式應用

首先得安裝.NET Core運行環境
參考資料:https://www.microsoft.com/net/core#ubuntu
安裝完成之後,輸入“dotnet --info”來測試是否安裝成功。



OK,接下來我們來運行。
定位到目錄,運行“dotnet ConsoleApp1.dll”



ps:記住不要用 “dotnet run”這個命令,不然會提示找不到“project.json”,輸入之後會執行一段東西因為一些原因沒有截到圖。

接下來?

接下來我會分享一樣在.NET Core如何編寫支持多種平台的類庫與應用程序。
比如寫一個類庫同時支持4.5,和.NETStandard 1.6等。
Copyright © Linux教程網 All Rights Reserved