天天都會用到的 .NET Core 指令

Console app 是最基本的 .NET Core 專案類型,常用在測試 class library、提供 class library 範例程式,或者開發跨平台的 CLI 工具,我們可以使用 ng new console 建立 console app 型態專案。

Version


macOS High Sierra 10.13.3
.NET Core SDK 2.1.101

建立 Console App 專案


1
$ dotnet new console -o MyConsole

使用 dotnet new 建立專案。

  • console : 建立 console 類型專案
  • -o : o output,建立在 MyConsole 目錄下

sdk009

  1. 輸入 dotnet new console -o MyConsole 將 console 類型專案建立在 MyConsole 目錄下
  2. .NET Core SDK 開始建立專案所需的檔案
  3. 自動 restore dependency

使用 VS Code 開啟專案


1
$ code MyConsole

使用 code 執行 VS Code,後面接開啟目錄名稱。

sdk010

  1. 第一次使用 VS Code 開啟 .NET Core 專案,會要求建立 .vscode 設定檔目錄,按 Yes 繼續

sdk011

  1. .vscode 被 VS Code 自動建立

編輯 Program.cs


sdk012

  1. 開啟 Program.cs
  2. World 改成 Sam 存檔

觀察 MyConsole.csproj


sdk013

  1. 開啟 MyConsole.csproj

csproj 負責紀錄 project 的 project 與 package 的 reference ,以及其他與 project 相關資訊,使用 Visual Studio 配合 .NET Framework 時,我們不會去維護 csproj 檔案,而是靠 Visual Studio 幫我們維護,但若使用 VS Code + .NET Core CLI 的組合時,將來會有很多機會要自己維護 csproj

還原 Dependency


1
~/MyConsole $ dotnet restore

使用 dotnet restore 根據 csproj 建立 package 與實際位置的 mapping 檔案。

sdk014

  1. 按熱鍵 Ctrl + ` 開啟內建的 terminal
  2. 輸入 dotnet restore 還原 dependency

編譯 Console App


1
~/MyConsole $ dotnet build -c Release

使用 dotnet build 編譯專案。

  • -c : configuration,預設 dotnet build 是以 Debug 模式編譯,若要以 Release 編譯,需要配合 -c 參數

dk00

  1. 輸入 dotnet build -c ReleaseRelease 模式編譯
  2. 自動執行 dotnet restore
  3. 最後 build 出 MyConsole.dll

注意是 build 到 Release 目錄

執行 Console App


1
~/MyConsole $ dotnet run

使用 dotnet run 執行專案。

dotnet run 明顯感覺比較慢,因為 C# 不是 script,dotnet run 事實上做了幾件事情 :

  1. dotnet restore
  2. dotnet build
  3. 最後才是執行程式

所以才會感覺比較慢

dk00

  1. 輸入 dotnet run 顯示執行結果
1
2
~/MyConsole $ dotnet /Users/oomusou/Code/CSharp/MyConsole/bin/Release/netcoreapp2.
0/MyConsole.dll

直接使用 dontet 執行 dll,由於使用 Release 模式編譯,速度非常快。

dk00

  1. 輸入 dotnet 直接執行編譯過 Release 模式的 MyConsole.dll
  2. 馬上出現 Hello Sam! ,不用等待

實務上不建議直接使用 dotnet run,因為速度很慢,要用 dotnet 執行編譯過且最佳化的 dll

清除 Assembly


1
~/MyConsole $ dotnet clean -c Release

使用 dotnet clean 清除所編譯的 dll。

  • -c : configuration,預設 dotnet clean 是清除 Debug 模式的 dll,若要清除 Release 模式的的 dll,需要配合 -c 參數

dk00

  1. 輸入 dotnet clean -c Release 清除以 Release 模式 build 的 MyConsole.dll
  2. 查看 bin/Release/netcoreapp2.0 目錄,確認所有檔案已經清除

發佈 Console App


1
~/MyConsole $ dotnet publish -c Release

使用 dotnet publish 將編譯後的 dll 與其 dependency 整理到 publish 目錄,將來只要將此目錄 deploy 到 server 即可。

  • -c : configuration,預設 dotnet publish 是將 Debug 模式的 dll 整理至 publish 目錄,若要整理 Release 模式的的 dll,需要配合 -c 參數

dk00

  1. 輸入 dotnet publish -c Release 將欲 deploy 的檔案整理到 bin/Release/netcoreapp2.0/publish 目錄
  2. publish 目錄下,我們總共發現有 4 個檔案
    • MyConsole.dll : 以 IL 為內容的 assembly
    • MyConsole.deps.json : 描述執行 dll 所需要的 dependency
    • MyConsole.runtimeconfig.json : 描述 dll 所需要的 .NET Core runtime 版本,以及其他 runtime 設定 (Ex. Garbage Collection 方式)
    • MyConsole.pdb : 在 production 環境啟動 debug 時使用

執行 Console App


1
~/MyProject $ dotnet bin/Release/netcoreapp2.0/publish/MyConsole.dll

使用 dotnet 執行 publish 後的 dll。

dk00

  1. 輸入 dotnet 直接執行 publish 過的 MyConsole.dll
  2. 馬上出現 Hello Sam! ,不用等待

Conclusion


  • 藉由 Hello World 練習最基本的 .NET Core SDK 指令
  • dotnet run 因為要執行 dotnet restoredotnet build ,所以執行速度較慢
  • dotnet publish 會幫我們將 dependency 加以整理,方便 deployment
2018-03-16