dotnet.exe五大天王new, restore, build, run, publish命令與watch外傳
在 .NET Core SDK 裡最重要的莫過於 dotnet.exe 命令,它提供一切 .NET Core 運行所需的基礎環境。
dotnet [command] [arguments] [--version] [--info] [-d|--diagnostics] [-v|--verbose]
dotnet [-h|--help]
dotnet 是進入點, dotnet 之後的 [command] 指定所要執行的命令,例如,dotnet build。也可以指定相容 .NET Core 的 DLL 來執行應用程式。
基本選項
-v:啟用詳細資訊輸出。--version:輸出 CLI 版本資訊。--info:輸出 CLI 詳細資訊。(含執行環境)-h:輸出說明。
dotnet new 命令
dotnet new: 根據指定的範本建立新的專案、組態檔或方案。
首先,我怎麼知道要建立的範例名稱呢?你可以用 -all 來查詢:
| Templates | Short Name |
|---|---|
| Console Application | console |
| Class Library | classlib |
| Unit Test Project | mstest |
| XUnit Test Project | xunit |
| ASP.NET Core Empty | web |
| ASP.NET Core Web App | mvc |
| ASP.NET Core Web API | webapi |
| Solution File | sln |
使用 Short Name 來指定範例:dotnet new console。
dotnet - Hello World
mkdir console
cd console
dotnet new console
dotnet restore
dotnet run
使用 dotnet new 來建立專案速度非常快,配合 Visual Studio 2017(或 Visual Stoduo Code)的目錄開啟功能,也是不錯的組合。
dotnet new 選項
-n|--name <OUTPUT_NAME>:等於省略mkdir <name>命令。例如,dotnet new mvc -n mvc會建立 mvc 目錄並產生相關檔案。-o|--output <OUTPUT_DIRECTORY>:指定產生目錄,預設為當下目錄。
dotnet new - mvc範本選項
每個範例可能有自己的選項,以下針對 mvc 範本討論。
-au|--authentication,預設是none,要啟用預設認證模組,請指定Individual。
當指定 Individual 會產生含 ASP.NET Core Inentity 功能的開發範本。
-uld|--use-local-db:指定範本是否使用 LocalDb,預設為 SQLite。值:true或false,預設false。
當使用含 -au 範本進行註冊,預設採用 SQLite。
dotnet restore 命令
dotnet restore:還原專案 NuGet 套件與工具。
還原工作需要 NuGet Source,預設由 NuGet.config (C:\Users\{username}\AppData\Roaming\NuGet) 取得。你在 Visual Studio 設定其他 NuGet Source 也是儲存至相同的設定檔中。你也可以在專案目錄下建立專屬 NuGet.config 設定檔,或透過 --configfile NuGet.config 選項指定。
dotnet restore 範例
dotnet restore:還原當下目錄中專案 NuGet 套件與工具。dotnet restore ./mvc/mvc.csproj:還原指定目錄專案 NuGet 套件與工具。
dotnet build 命令
dotnet build:建置專案。
當專案的 NuGet 相依性或工具有異動,記得先進行 dotnet restore 再進行 dotnet build,不然會得到一堆錯誤,尤其是新專案剛建立時。
dotnet build 建置成功會在 bin 目錄產生相關檔案。
*.pdb:偵錯符號檔。*.dll:DLL檔。*.deps.json:應用程式所有套件與工具相依性。*.runtime.config.json:指定執行階段與版本。
另外注意,dotnet build 建置後尚未準備好轉移到另一部電腦執行,這與 .NET Framework 的行為相反。
此外,專案是否建置為可執行檔(.exe)由 .csproj 專案案的 <OutputType> 屬性來判斷:
<PropertyGroup>
<OutputType>Exe</OutputType>
</PropertyGroup>
與 DLL 的差異在於,DLL 不包含任何進入點。
dotnet build 範例
dotnet build .\mvc2\mvc2.csproj:建置指定目錄的專案。dotnet build -c Release:-c|--configuration [Debug|Release]設定建置組態。預設Debug。dotnet build -v n:-v|--verbosity [q|m|n|d|diag]輸出詳細等級。預設m。
dotnet run 命令
dotnet run:「就地」執行原始程式碼,而不需要有任何明確的編譯或啟動命令。
dotnet run 用於專案根目錄,而非已建置的組件目錄:
如果要執行 DLL,應該使用未含任何 [command] 的 dotnet,例如:dotnet kkapp.dll。
注意,不建議在生產環境使用 dotnet 來執行應用程式,應該使用 dotnet publish 來建立部署資料,於生產環境使用部署資料。
dotnet run 範例
dotnet run -c Release:-c|--configuration {Debug|Release}設定建置組態。預設Debug。
dotnet publish 命令
dotnet publish:將應用程式和所有相依套件封裝到 publish 資料夾,以準備進行部署發行。
dotnet publish 會產生:
- 編譯應用程式產生 *.dll 組件
- *.deps.json 檔案
- *.runtime.config.json 檔案
- 相依性套件,會從 NuGet 快取複製至 publish 資料夾。
dotnet publish 選項
dotnet publish -o z:\mvc2-publish:-o|--output <OUTPUT_PATH>指定放置目錄。
-c|--configuration [Debug|Release]設定建置組態。預設Debug。
dotnet publish - macOS範例
dotnet publish --framework netcoreapp1.1 --runtime osx.10.12-x64
以 netcoreapp1.1 架構和 osx.10.12-x64 執行階段來產生發行檔案。
在發行之前,必須在 dotnet restore 指定 -r osx.10.12-x64 (可由 dotnet --info 取得 RID 資訊)。
dotnet clean
dotnet clean:清除前一次建置(build)的輸出。obj和bin資料夾會同時清除。
外傳:dotnet watch 命令
修改 *.csproj
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="1.0.0" />
</ItemGroup>
加入 Microsoft.DotNet.Watcher.Tools 以取得 dotnet watch 的支援。
More:Microsoft.DotNet.Watcher.Tools README.md
小結
我們從建立專案(new)、進行套件還原(restore)、進行建置(build)、執行(run)與發行(publish),這幾乎含概了開發過程中所有主要流程。並且,同一套 dotnet 指令在 Windows、macOS、Linux、docker 完全通用。
學起來,絕不吃虧。
ps. 本文dotnet.exe使用.NET Core 1.1,.NET Core 2.0-Preview可以參考另一篇。



















沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。