都說.NET Core可以跨平台,說實話Linux咱也不太懂,咱也不敢問。怎樣把一個簡單的Console App在Linux下跑起來,真是費了我一番功夫。特做此篇以供指北。
.NET Core的大餅我就不替某軟畫了。接下來我們就做個傻瓜教程,把Visual Studio 2019(VS2017也可以)開發的Console App,publish並且在Ubuntu上運行。就其中遇到的問題以及解決方法和大家討論。
首先我們准備一下環境。Visual studio 2019和.NET Core SDK 2.2。其中Visual Studio可以去這個地址:
https://visualstudio.microsoft.com/downloads/
下載免費的Community版本。這個免費的Community版本絕對良心,除了條款寫了不能用作商業用途,跟賣幾千刀的版本比並不缺少任何核心功能。
.NET Core的下載地址:
https://dotnet.microsoft.com/download
Visual Studio 2019(2017)自帶的.NET Core版本是2.1,因為我們會嘗試2.2版本以后才支持的publish mode:Framework-dependent executable。所以還是推薦升級到最新版。
注意VS2017需要下載下圖這個兼容性2.2版本。
准備就緒之后,開始創建第一個.NET Core的Console APP。說實話整個過程和.NET Framework沒有任何區別。
不修改任何一行代碼,即可點擊F5運行,會在控制台中輸出Hello World。
然后讓我們試一下publish功能。如下圖在project文件上右鍵選擇publish。
采用默認的配置,一路Next下去。會在Release文件夾下面生成一個publish文件夾,其中包含了我們Console APP的發布用版本
打開這個文件夾仔細一看,發現木的exe文件,莫不是我眼花了??這特么怎么運行??剛開始把老紙尿都嚇出來了。后來發現這是因為.NET Core 2.x版本的默認發布方式都是Framework-dependent deployment(具體3種發布方式我們稍后討論)。意思就是需要通過dotnet CLI來運行程序,可以理解為需要通過cmd命令行窗口來啟動程序。而dotnet CLI可以通過安裝.NET Core Runtime來獲得(當然你裝完整的.NET Core SDK也可以)。
讓我們打開cmd窗口,通過cd命令進入到publish的目錄。然后鍵入dotnet dotnetcorehelloworld.dll。我現在很后悔剛才起了這么長一個名字,還好Windows下不區分大小寫。然后可以在控制台窗口中看到hello world的輸出了。和通過F5 Debug是一樣的。
Windows下的准備工作已經完成了。接下來我們試着將這個Console APP在Ubuntu下運行。
首先請大家拿出Ubuntu的機器,什么沒有??要不要來戴爾買一台?
開個玩笑,我們窮逼雖然什么都買不起,但是最懂生活,沒有Ubuntu我們可以5分鍾之內在Windows上裝一個。
此時此刻,我突然感覺某軟那個CEO有點意思,什么“予力全球每一人、每一組織,成就不凡。”。讓我們來體驗下某軟怎么幫我們學習Linux的。
打開MS Store搜索Ubuntu,第一個大圖點開閉着眼睛裝唄,安裝過程非常迅速。
安裝完成了先別急着點,要去控制面板的Windows Features里勾選Windows Subsystem for Linux。
找不到的同學直接任務欄搜索或者問Cortana。
完成以上兩步之后,就可以點擊打開橘色的Ubuntu了,第一次打開會有個短暫的配置過程,然后要求你輸入用戶名和密碼,和Windows的是獨立的。我們只是簡單學習使用,所以隨便起個好記的名字和密碼就可以了。
打開Ubuntu的控制台界面后,我們希望能訪問C盤,鍵入cd /mnt/c。然后再鍵入ls,就能看到C盤的文件了,當然有一些在Linux環境下是訪問不了的。
為了簡單起見,我們切回Windows界面,將publish文件夾拷貝到C盤根目錄。然后只需要cd publish就可以找到我們的程序了。
非常遺憾我們還不能通過dotnet命令運行程序,因為我們根本就沒在Linux環境下安裝.NET Core的runtime啊!沒有圖形環境的話,只能敲命令行安裝了,參考下面的鏈接:
https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install
記得選Ubuntu 18.04,之后只管一通亂敲。不放心的話可以通過這個Linux命令確認Ubutu版本:lsb_release -a
完成這步安裝后,只要簡單的鍵入dotnet DotNetCoreHelloWorld.dll就可以運行程序了。注意Linux下區分大小寫。現在知道為什么要把publish拷出來了吧,不然cd目錄累死人。
至此大功告成!感謝各位看到這里,想必各位還有很多疑問,我們后面再接着討論。
這個Hello World工程我就不上傳Github了。各位自己實驗吧,如果懷疑Windows subsystem for Linux的真實性,那么就來戴爾買個Ubuntu的機器^O^