﻿# 體驗 .NET Core 2.1 全新的全域工具安裝與使用 (.NET Core Global Tools)

.NET Core SDK 已經來到 [2.1.300-preview2](https://dotnet.microsoft.com/en-us/download/dotnet/2.1) 版本，這個版本在安裝 .NET Core Global Tools 的時候，跟前一版 Preview 不太一樣，這導致網路上有許多文章的命令都是錯誤的，所以肯定有些人會鬼打牆一段時間，所以特別寫篇文章帶大家認識這個好用工具。

微軟有個 [dotnetsay](https://github.com/richlander/dotnetsay) 範例專案，可以帶你嘗試 .NET Core Global Tools 的基本使用方式。在嘗試新功能之前，請務必檢查你的 .NET Core SDK 已經安裝到最新版本：

> **dotnet --info**

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f4a53de9f8e09da75589-image_thumb_238.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4f56fa58006a919c39ca-image_3106.png)

接著，你可以透過以下 **dotnet tool install -g dotnetsay** 命令，來安裝 **dotnetsay** 工具！(以前是 dotnet install tool 命令)

安裝成功後，預設就可以直接執行 **dotnetsay** 的全域工具，相當便利！

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/492cb32e80ad39f5d47f-image_thumb_239.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ff3a729582afea2554bf-image_3107.png)

接著透過 **dotnet tool list -g** 就可以列出目前已安裝的全域工具，透過 **dotnet tool uninstall -g dotnetsay** 就可以立即解除安裝！

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b050b17efd8c3109daa4-image_thumb_240.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4a381f01c1fd44f125b7-image_3108.png)

這裡所安裝的 .NET Core Global Tools，各位千萬不要誤會，安裝的過程預設都會自動從 NuGet 下載套件並自動安裝在**目前使用者**目錄下 ( **%userprofile%\\.dotnet\\tools** )，並不是真的安裝在「所有使用者」。我第一次看見「全域」這個字詞，會直覺認為所有使用者都可以執行這個命令，但事實上並不行！如果你安裝了工具，該目錄下也有執行檔存在，卻無法執行，那就意味者你的 **PATH** 環境變數沒有指向到正確的路徑，你只要手動調整一下即可。

除此之外，要自行開發 .NET Core Global Tools 也非常容易，基本上就是寫一個 Console 應用程式而已，只要在你的 **\*.csproj** 專案檔 (MSBuild Configuration File) 中加入一個 **<PackAsTool>true</PackAsTool>** 即可，然後執行 **dotnet pack -c release -o nupkg** 就會自動封裝成必要的 NuGet 套件，到時將套件上傳到 NuGet 即可完成工具部署。

**注意：**目前 Preview 2 版本要在本地測試部署的時候，需要建立一個 nuget.config 檔案才能進行本地測試部署，詳情請見[這裡](https://github.com/richlander/dotnetsay#installation)。

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/78789c75997af7480fd7-image_thumb_241.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6122ffefbb17603144d0-image_3109.png)

另外，我也推薦另外一套 .NET Core Global Tool 名叫 [dotnet-serve](https://github.com/natemcmaster/dotnet-serve)，這是一套極度輕量的 HTTP 伺服器。當透過 **dotnet tool install --global dotnet-serve** 安裝成功後，除了可以直接用 dotnet serve 快速啟動簡易 HTTP 伺服器外，也可以透過 **dotnet serve --razor** 快速啟動支援 Razor Pages 的 HTTP 伺服器。我正在期待作者添加更多選項設定，相信日後功能還會漸漸完善。

最後，我還想特別提及 ASP.NET Core 在 2.0 版以前，如果需要安裝擴充的 .NET Core CLI 工具，都需要額外安裝 ( 請參考 [.NET Core CLI tools extensibility model](https://learn.microsoft.com/en-us/dotnet/core/tools/extensibility) )，例如 [**dotnet watch**](https://github.com/aspnet/DotNetTools/blob/master/src/dotnet-watch/README.md)、[**dotnet user-secrets**](https://github.com/aspnet/DotNetTools/blob/master/src/dotnet-user-secrets/README.md)、[**dotnet sql-cache**](https://github.com/aspnet/DotNetTools/blob/master/src/dotnet-sql-cache/README.md)、[**dotnet-dev-certs**](https://github.com/aspnet/DotNetTools/blob/master/src/dotnet-dev-certs/README.md) 等等。如果你想查詢各命令用法，在命令後面加上 **\--help** 即可查詢使用說明。現在這些工具都已經內建在 .NET Core SDK 裡面，不用再額外安裝了！完整說明請見 [aspnet/DotNetTools](https://github.com/aspnet/DotNetTools) 專案。

**相關連結**

-   [dotnetsay .NET Core Global Tools Sample](https://github.com/richlander/dotnetsay)
-   [Announcing .NET Core 2.1 Preview 1](http://shazwazza.dropmark.com/327217/13842526)
-   [Announcing .NET Core 2.1 Preview 2](https://blogs.msdn.microsoft.com/dotnet/2018/04/11/announcing-net-core-2-1-preview-2/)
-   [.NET Core command-line interface (CLI) tools](https://learn.microsoft.com/en-us/dotnet/core/tools/)
-   [aspnet/DotNetTools: Various .NET command line tools](https://github.com/aspnet/DotNetTools)
