1. 程式人生 > >DotNet Core 多平臺開發體驗

DotNet Core 多平臺開發體驗

前言

隨著net core rc2的釋出,園子裡面關於net core的入門文章也也多了起來,但是大多數都是在一個平臺上面來寫幾個簡單的例子,或者是在解釋程式碼本身,並沒有體現說在一個平臺上面建立一個專案,然後通過原始碼管理簽出到另一個平臺上繼續開發。還有就是一次編譯到處執行是如何體現的?這樣型別的文章好像還沒有在哪裡看到過,於是我就想自己來一遍,並把這個過程分享出來給大家。

首先來個官方的介紹:

一、mac os x 上的開發

本來環境安裝是不想寫的,因為有太多的文章,但是不寫的話又感覺少了些什麼。然後我只有一個mac和一個安裝win10的pc,所以就只針對這兩個平臺來,linux等我有錢買新電腦再來折騰。廢話不多說,下面開始介紹。

mac os x環境下 dotnet core 的安裝

首先要先安裝一個 OpenSSL 這個是以後 dotnet core 要下載一些依賴庫什麼的會用到的。可以使用 brew 來安裝OpenSSL

開啟命令終端輸入brew安裝命令

Shell
1 /usr/bin/ruby-
e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安裝好brew 之後繼續輸入OpenSSL安裝命令

Shell
123 brew install opensslbrew link--force openssl

這兩個東西安裝後,我們就可以來安裝我們我們的core了,下載這麼一個安裝包 點選下載 這是一個pkg安裝包。我現在的時候是 dotnet-dev-osx-x64.1.0.0-preview1-002702.pkg 只要雙擊一下安裝包,然後一直點選繼續就可以了

安裝完之後可以輸入命令檢視dotnet core 有沒有安裝成功

Shell
1 dotnet-v

命令列下的專案建立與執行

安裝完環境後,我們就可以來開始我第一個專案。我們新建一個資料夾叫做LearnDotnetCore然後開啟命令視窗 cd 到這個資料夾下面。然後用命令 dotnet new來建立初始化一個專案。初始化完後我們看看到資料夾下面多了兩個檔案 Program.cs project.json

Program.cs 是c#原始碼檔案,可以用來實現我們的具體邏輯

project.json 是配置依賴框架,依賴包,版本號,還有其他一些編譯會用到相關的東西。這個作用和nodejs的模式是相類似的。

專案建立完之後需要 dotnet restore 來下載我們配置好的依賴包。下載完後呢資料夾裡面多出了一個 project.lock.json 檔案,開啟來看,可以看到我們下載了那些依賴庫,還有一些編譯的引用等。

下載完依賴庫後,我們可以通過執行命令 dotnet run 來編譯執行我們的程式。

編譯完成後,資料夾內會多出兩個資料夾 bin 和 obj 。

bin 是我們編譯的完成的檔案

obj 裡面是一些編譯輸出和動態庫連線等的一些資訊。

然後執行我們可以看到輸出 Hello World! 到這來,我們的命令列建立、編譯和執行程式就到這來結束了。

使用vscode除錯執行

單純使用命令列來開發的話,那麼肯定是沒有那麼方便了,但是在但是目前好像也沒有什麼特別好的選,所以我們就使用 Visual Studio Code 然後再安裝一個外掛C# extension

還有一個叫做Xamarin Studio.,貌似還沒有支援到 dotnet core的樣子

當然還有一個叫做 Project Rider的東西,之前 net core 用 DNX 命令的時候下載來玩過一下,支援什麼的還可以,不過很久沒有玩了,最近一次編譯更新是在 5月17號,也不知道現在支援如何。有興趣的同學自己下載來玩下,內容不在本文章中介紹了。

開啟vscode然後把專案的資料夾拖拉到vscode的視窗上面去,會在左邊的工作空間欄目中顯示專案的樹形結構。然後我們選擇project.json,編輯器會提示你是否要加入除錯資訊,然後我們點選yes,目錄結構就會多出一個.vscode資料夾裡面有兩檔案 launch.jsontasks.json

然後我們去修改 launch.json 裡面的內容,把program裡面的內容改成我們編譯完成後的dll路徑,當然有的有時候會給你自動生成好的,不需要自己修改。

“program”: “${workspaceRoot}/bin/Debug/netcoreapp1.0/LearnDotnetCore.dll”,

還有就是args也修改一下,這個是main函式的傳入值。

“args”: [“我試試看傳入了什麼”],

修改完後在Program.cs裡面加個斷點,接著直接按f5,或者點開debug面板,然後點選那個除錯按鈕開始除錯

我們可以看到,一個變數的監視資料,還有就是控制檯打印出了 Hello World!

程式碼上傳

我選擇了用github來儲存程式碼,並且在window上通過git下載到vs裡面進行繼續開發

首先我們開啟git面板來初始化git儲存庫

初始化完後,我們可以看到我們有15個檔案要提交,但是我們並不需要把這麼多個檔案都給提交了,我們只要提交Program.cs project.json 這兩個檔案,然後在其他地方下載後來生成其他檔案就可以了。

於是,我們就添加了一個.gitignore檔案,檔案內容新增要排除的東西,然後我們就剩下三個檔案提交了

最後,輸入提交的資訊然後點選那個勾符號,就提交到本地的庫裡面了。

完成了上面的步驟後,我們還需要把庫同步到github上面去。首先,我們去註冊一個賬戶,然後新建一個repository,建立過程自己摸索,就不寫的那麼詳細。建完後如下圖

然後到我們的目錄下輸入下面的兩條命令

git push -u origin master

如果有使用者名稱密碼,就輸入使用者名稱密碼,然後儲存庫就同步到了github上面去了。記住地址什麼的要改成自己的。

二、window 上的開發

切到win10上面來繼續完成這個博文。

開發環境的安裝

首先要先下載下面的工具:

這兩個軟體的安裝就不需要截圖了,先安裝Visual Studio Community 2015再安裝DotNetCore.1.0.0.RC2-VS2015Tools.Preview1。安裝完之後我們開啟vs 2015,然後把我們之前在mac上面建立的專案給下載下來。

打vs後我們選擇 open from source control 然後出現左邊的面板,如果沒有登入你的github賬號,那麼就先登入你的賬號,然後再點選Clone出現一個視窗選擇我們前面上傳的那個專案。

下載完後雙擊我們的git專案,然後在彈出的窗口裡面選擇project.json,就會生成左邊的那樣專案工程了。

然後我們編譯成功並執行起來。

到這裡我們已經成功的把在mac上面建立的專案拉到win下不改任何程式碼,然後成功編譯運行了。

釋出執行

上面的開發過程中都是直接在id裡面執行的,或者用 dotnet run 來直接執行的,那麼我們編譯好之後如何脫離IDE來執行呢?

  1. 我們也可以到編譯成功的目錄 netcoreapp1.0 下面輸入命令 dotnet LearnDotnetCore.dll 來執行我們的程式。
  2. 可以在project.json加個 runtimes 屬性,然後編譯出一個exe檔案,然後直接執行exe。

要編譯成Release的話,可以用命令 dotnet build --configuration Release --no-dependencies --no-incremental 當然build的命令以後可以有單獨的文章來講解

第一種編譯的配置

C#
1234567891011121314151617 {"version":"1.0.0-*","buildOptions":{"emitEntryPoint":true},"dependencies":{"Microsoft.NETCore.App":{"type":"platform","version":"1.0.0-rc2-3002702"}},"frameworks":{"netcoreapp1.0":{"imports":"dnxcore50"}}}

第二種編譯的配置

C#
123456789101112131415161718192021 {"version":"1.0.0-*","buildOptions":{"emitEntryPoint":true},"dependencies":{"Microsoft.NETCore.App":{//"type": "platform","version":"1.0.0-rc2-3002702"}},"frameworks":{"netcoreapp1.0":{"imports":"dnxcore50"}},"runtimes":{"win10-x64":{},"osx.10.11-x64":{}}}

第二種配置使用dotnet publish會把core的支援執行一起打包處理,然後相關的平臺就不用安裝net core,但是不同平臺需要不同編譯。具體的效果和目錄結構我就不進行截圖了,有興趣的自己編譯看看。

三、改造成web專案

前面介紹瞭如何編譯和執行控制檯的程式,但是在這個網際網路的時代,我感覺要做成一個web專案可能會更有趣,我們看看如何直接把前面控制檯的專案變成web專案。

vs修改執行

首先修改配置 project.json,在屬性dependencies新增Kestrel依賴。

第二新增一個類Startup

C#
123456789101112131415161718 usingSystem;usingMicrosoft.AspNetCore.Builder;usingMicrosoft.AspNetCore.Hosting;usingMicrosoft.AspNetCore.Http;namespaceLearnDotnetCore{publicclassStartup{publicvoidConfigure(IApplicationBuilder app){app.Run(context=>{returncontext.Response.WriteAsync("Hello from ASP.NET Core!");});}}}

然後修改Program.cs

C#
123456789101112131415161718 usingSystem;usingMicrosoft.AspNetCore.Hosting;namespaceLearnDotnetCore{publicclassProgram{publicstaticvoidMain(string[]args){varhost=newWebHostBuilder().UseKestrel().UseStartup().Build();host.Run();}}}

然後點選執行按鈕,程式成功的執行起來

開啟瀏覽器訪問 http://localhost:5000/ 我們可以看到瀏覽器打印出 Hello from ASP.NET Core!證明我們的程式已經編譯並執行成功。

釋出並部署iis

雖然說直接執行可以訪問成功,但是有的人就是喜歡部署到IIS上面去,所以這裡也嘗試一下部署到IIS上面是什麼樣的。

然後修改project.json的內容,新增下面三個東西,來支援iis執行

然後修改Program.cs,新增iis支援

C#
1234567891011121314151617181920212223 usingSystem;usingSystem.IO;usingMicrosoft.AspNetCore.Hosting;namespaceLearnDotnetCore{publicclassProgram{publicstaticvoidMain(string[]args){varhost=newWebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).UseIISIntegration().UseStartup().Build();host.Run();}}}

新增檔案 web.config

C#
1234567891011121314 <code><?xml version="1.0"encoding="utf-8"??><configuration><!--Configure your application settings inappsettings.json.Learn more at http://go.microsoft.com/fwlink/?LinkId=786380--><system.webserver><handlers><add name="aspNetCore"path="*"verb="*"modules="AspNetCoreModule"resourcetype="Unspecified"/></handlers><aspnetcore processpath="%LAUNCHER_PATH%"arguments="%LAUNCHER_ARGS%"stdoutlogenabled="false"stdoutlogfile=".logsstdout"forwardwindowsauthtoken="false"/></system.webserver></configuration></code>

上面三個修改完之後,就可以來發布,選擇專案郵件,然後選擇釋出會出現一個視窗

輸入名稱,然後next或者直接publish,操作完成後會生成一堆檔案。然後到iis裡面建立 Web 站點,然後繫結釋出目錄就行,應用程式池的模式需要改為“無程式碼託管”。

啟動網站執行後,瀏覽器輸入http://localhost/ 可以看到瀏覽器打印出 Hello from ASP.NET Core!和上面沒有在iis裡面執行的效果是一樣的。

四、申請vps並上傳專案執行

在文章開頭說了,沒有Linux的系統,但是後來想了一下,還是也體驗一下看看,於是就去 host1plus 買了一個vps,一個是可以體驗一下發佈一個net core 做的網站,另一個就是以後還可以放一些執行示例什麼的。

我買的vps安裝的是centos-7系統,可以使用ssh遠端登入上去管理。先給安裝一個 net core 的執行環境。

輸入安裝命令:

結果返回了錯誤。

Shell
12345 dotnet_install:Error:Unable tolocate libunwind.Install libunwind tocontinuedotnet_install:Error: