﻿# 如何在多個 .NET Core SDK 版本之間進行切換 (global.json)

由於同一台電腦可以安裝多個版本的 .NET Core SDK，每個版本的 SDK 都會包含完整的工具組、執行環境、組件庫與編譯器等等，所以蠻多人詢問過我這個問題：「當安裝了許多不同版本的 .NET Core SDK 之後，要如何才能使用舊版 [dotnet](https://learn.microsoft.com/zh-tw/dotnet/core/tools/dotnet?tabs=netcore2x) 命令，執行 **dotnet new** 或 **dotnet build** 之類的命令。」這部分其實並不困難，只要設定 [global.json](https://learn.microsoft.com/zh-tw/dotnet/core/tools/global-json) 即可。

在 .NET Core 2.0 版以前，要查詢目前電腦所有安裝過的 SDK 版本，如果在 Windows 作業系統，可以透過控制台的「應用程式與功能」查看安裝過的 .NET Core SDK 版本，或是透過檔案總管開啟 C:\\Program Files\\dotnet\\sdk 資料夾，查看有哪些版本。如果在 Linux 作業系統下，路徑則在 /usr/share/dotnet/sdk 目錄下。

[![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b2440342c3bc1e5f309e-image_thumb_242.png "image")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/9d4abc13607d3c5059cd-image_3110.png)

但是從 .NET Core SDK 2.1 開始，預設的 **dotnet** 命令就包含了 **dotnet --list-sdks** 命令，直接可以列出所有已安裝過的版本。

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/420fecb60f2c96792b28-image_thumb_243.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/16177e7bfaad7bc38976-image_3111.png)

查詢已經安裝過 SDK 版本號是非常重要的，當你想透過 **global.json** 切換 SDK 版本的時候，必須手動輸入這些已安裝的版本號。

首先，我們先來示範如何快速建立 **global.json** 檔案：

1\. 先利用 **dotnet new globaljson** 快速建立這個檔案

-   預設這個檔案會記錄當前目錄要使用的 .NET Core SDK 版本
-   預設的 SDK 會等同於目前執行 dotnet 命令時所用的 SDK 版本一致  
    [![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6b24b12c4cb9971df1d3-image_thumb_244.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/60da2210ff40edb855a9-image_3112.png)

2\. 然後將 **global.json** 檔案內的 "version" 修改為特定 SDK 版本即可

-   如下圖示  
    [![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a30fb4367add14b405c0-image_thumb_245.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1f23e79f3af6fb40696d-image_3113.png)

或者是你也可以利用 **\--sdk-version** 參數，直接給定 SDK 版本，如下圖示：

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f6b9a77f38ead7b7a3ba-image_thumb_246.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6f7e93a7acae3610d993-image_3114.png)

```bash
dotnet new globaljson --sdk-version 2.1.805
```

**請注意：**在執行 **dotnet** 命令的時候，它會自動找尋**當前目錄**與**上層目錄**的 **global.json** 檔案，這裡的**上層目錄**會一直往上找，找到**根目錄**為止！如果都找不到 **global.json** 就會預設選用目前所有已安裝 .NET Core SDK 的最新版。

一般來說，每一個透過 .NET Core 開發的專案，都不太需要 **global.json** 檔案的存在，因為隨著每次 .NET Core 版本升級，可以讓該專案永遠以「最新版 SDK」進行建置或發行。但是如果你還是擔心會有破壞性更新出現的話，這時你就可以建立一個 **global.json** 定義檔，將使用的 .NET Core SDK 鎖定在特定版本，以確保應用系統的穩定。

**相關連結**

-   [global.json reference | Microsoft Docs](https://learn.microsoft.com/en-us/dotnet/core/tools/global-json)
-   [global.json 參考 | Microsoft Docs](https://learn.microsoft.com/zh-tw/dotnet/core/tools/global-json)
