dotnetup 環境配置

Note

dotnetup 目前處於公開預覽階段。 其特性與行為可能會在正式上市前改變。

Dotnetup 可以設定環境,讓它安裝的 .NET SDK 和執行環境可用。 它透過設定以下環境變數來達成此目標:

  • PATH:使 dotnet 指令可在命令列中使用。 開發工具如 Visual Studio 或 C# Dev Kit 也會使用 PATH 來尋找 .NET SDK 和執行階段。
  • DOTNET_ROOT: 告訴依賴框架的應用程式執行檔在哪裡找到 .NET 安裝及其共享執行時。

Dotnetup 支援不同的存取模式,以控制這些環境變數的設定位置。 你可以在最初的 dotnetup 設定中選擇存取模式,或之後用 dotnetup env 指令選擇。

存取模式 行為
none 不會修改這些環境變數。 使用 dotnetup dotnet 執行 .NET。
shell 修改 shell 設定檔以設定這些環境變數。 從該 shell 啟動的程序使用 dotnetup 安裝的 .NET SDK 和執行時。
everywhere 修改系統 PATH 並設定使用者層級 DOTNET_ROOT 的環境變數。 僅適用於 Windows。

預設情況下,dotnetup 也會自動加入 PATH,不論存取模式設定為何。 這可以用 dotnetup env set --dotnetup-on-path <true|false> 來控制。

無處不在模式的考量

Everywhere 模式是 Windows 的預設,因此 dotnetup 安裝的 SDK 和執行環境可在開發工具和以 cmd 作為 shell 的終端機中使用。 不過,有一些事情需要注意,主要是關於它如何與全機器安裝的 .NET SDK 和執行環境互動。

全機的 .NET 安裝位於 Program Files 資料夾下。 它們可以用安裝程式安裝,安裝程式可從 .NET 下載頁面下載。 Visual Studio 安裝全機的 .NET SDK 與執行環境,且依賴框架的應用程式安裝程式也可能在全機位置安裝他們依賴的 .NET 執行環境。

在 everywhere 模式下,由 dotnetup 管理的使用者本地 .NET 安裝根會覆寫全系統的 .NET 安裝根目錄。 這表示安裝在程式檔案中的 .NET SDK 與執行階段將無法使用。 依賴這些 SDK 的專案若未安裝相應的 SDK,將無法建置。 若未安裝相符的執行環境,依賴框架的應用程式將無法啟動,並會跳出錯誤訊息:「您必須安裝或更新 .NET 才能執行此應用程式。」

為避免這些失敗,初始 dotnetup 設定提供遷移現有系統 .NET SDK 與執行時安裝的選項。 你也可以透過針對 SDK 執行 dotnetup sdk install --migrate-from-system,或針對執行階段執行 dotnetup runtime install --migrate-from-system 來明確遷移它們。

開啟或關閉 everywhere 模式需要修改系統 PATH,這需要提高權限(例如核准 UAC 提示,或「以管理員身分執行」)。 這是因為 .NET 的全系統安裝程式會將程式檔案 .NET 安裝根目錄加入系統 PATH,且系統 PATH 在解析指令時優先於使用者層級的 PATH。 所以 dotnetup 需要修改系統 PATH,讓 dotnetup 的 .NET 安裝根目錄具有優先順序。

由於系統 PATH 適用於所有使用者,這些變更可能會影響其他使用者。 新增到系統 PATH 的路徑預設位於使用者的本地 AppData 資料夾中。 其他使用者通常無法存取這個內容,因此不會影響 dotnet 會解析為哪個版本。 然而,升格的程序(例如以管理員身分執行)能讀取路徑,並可能意外解析其他使用者的 .NET SDK 或執行階段。

支援的 Shell

支援設定檔案與腳本產生:

  • Bash
  • Z Shell
  • 魚
  • Pwsh (PowerShell Core)
  • PowerShell

若未傳入 --shell,則 dotnetup 會偵測目前的 Shell。 當偵測不可用或想更新不同設定檔時,請使用明確的 shell:

dotnetup env set shell --shell zsh

儲存與已觀察狀態

dotnetup.config.json 儲存所選存取模式,以及 dotnetup 是否應在 PATH 上啟用。 dotnetup env show 將該配置與目前的設定檔及環境進行比較。 如果觀察到的狀態不匹配,它會報告偏移。

重新套用儲存的配置以修正漂移:

dotnetup env set

目前航廈

使用者設定檔與 Windows 環境變更不會覆寫目前程序的環境。 開啟新終端機,載入修改過的設定檔,或評估已產生的腳本。

針對 Bash 或 Z shell:

eval "$(dotnetup env script)"

對於 PowerShell:

dotnetup env script --shell pwsh | Invoke-Expression

env script 當你未傳遞選取選項時,會依照儲存的設定來執行。 請使用 --dotnet、--dotnetup 或兩者,來選取產生的內容。

移除環境設定

移除所有受管理環境連線:

dotnetup env clear

此指令相當於:

dotnetup env set none --dotnetup-on-path false

它不會解除安裝 SDK 或執行環境。