dotnetup 故障排除

Note

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

本文將說明常見問題 dotnetup 及其解決方法。

收集診斷資訊

在你排除問題之前,請先收集以下資訊:

  • 顯示 dotnetup 版本、架構、執行時識別碼及已驗證的安裝:

    dotnetup --info
    
  • 顯示已追蹤的安裝規格與安裝,並驗證磁碟上的檔案:

    dotnetup list
    
  • 比較儲存環境設定與目前環境:

    dotnetup env show
    
  • 再次以詳細輸出重新執行失敗的指令。 例如:

    dotnetup sdk install 10.0 --verbosity detailed
    

專案不會建置,應用程式也不會在安裝/設定完成後啟動

症狀:在 Windows 上以everywhere模式設定dotnetup後,之前可順利建置的專案現在無法建置。 或者,依賴框架的應用程式會出現此錯誤:

You must install or update .NET to run this application.

原因: 在 everywhere 模式下,dotnetup 管理的安裝優先於 Program Files 中的全機安裝。 僅存在於全機器範圍安裝中的 SDK 與執行階段無法取得。

解決方案: 將全機的 SDK 和執行環境遷移到 dotnetup 管理的安裝中:

dotnetup sdk install --migrate-from-system
dotnetup runtime install --migrate-from-system

或者,變更為 shell 或 none 存取模式。 更多資訊請參閱「Everywhere 模式的考量」。

Dotnet 不使用 dotnetup 管理的安裝

症狀: 你終端機裡的 dotnet 指令並沒有使用 dotnetup 安裝的 SDK。

原因: 終端機在 dotnetup 變更環境之前已開啟,或者環境設定與儲存的設定不符。

Solution:

  1. 開啟新的終端機。 對 shell 設定檔或 Windows 環境變數的變更不會影響已經開啟的終端機。

  2. 執行 dotnetup env show。 如果回報發生漂移,就執行 dotnetup env set 一次,重新套用儲存的設定。

  3. 若要僅配置當前終端,請評估 dotnetup env script 的輸出。 例如,在 Bash 或 zsh 中:

    eval "$(dotnetup env script)"
    

    在 PowerShell 中:

    dotnetup env script --shell pwsh | Invoke-Expression
    

更多資訊請參閱 管理 dotnetup 環境。

安裝路徑已經包含一個未追蹤的安裝

症狀: 安裝指令會因以下錯誤而失敗:

The install path '<path>' already contains a .NET installation that is not tracked by dotnetup. To avoid conflicts, use a different install path, remove the existing installation first, or use the --untracked option to install without tracking.

原因:dotnetup它不會把追蹤過的檔案安裝到包含它未追蹤的 .NET 安裝的資料夾裡。這個檢查可以防止 dotnetup 的檔案與另一個工具擁有的檔案混在一起。

解決方案: 請做以下其中一項:

  • 使用 --install-path 選項選擇另一個資料夾。
  • 從該資料夾中移除現有的安裝內容。
  • 如果該資料夾由另一個工具擁有,就用這個 --untracked 選項。 dotnetup 不列出、更新或移除未追蹤的檔案。

欲了解更多資訊,請參閱管理自訂安裝根目錄。

dotnet 執行檔目前正在使用中

症狀:在 Windows 上,安裝指令會顯示類似以下訊息的警告:

Warning: Could not update dotnet executable at '<path>' - it is currently in use by another process. Close all running .NET applications and try again. The existing muxer will be retained. ...

原因: 執行中的程序會使用 dotnet 執行檔,因此 dotnetup 無法替換它。 安裝會使用現有的 dotnet 執行檔繼續進行。 新的執行環境可能需要較新的 dotnet 執行檔。

解決方案:關閉所有正在運行的 .NET 應用程式、IDE 和建置伺服器。 然後,再執行一次安裝指令。 要讓指令失敗而非發出警告並繼續執行,請使用這個 --require-muxer-update 選項。

另一個 dotnetup 程序正在執行

症狀: 一個指令顯示此訊息並等待:

Another dotnetup process is running. Waiting for it to finish...

原因:dotnetup 將對共享安裝狀態的變更依序處理。 另一個 dotnetup 指令也在改變同樣的狀態。

解決方案: 等待另一個命令完成。 如果沒有其他 dotnetup 程序執行,找出停止回應的 dotnetup 程序並終止它們。

資訊清單已損毀

症狀: 指令失敗時會出現以下錯誤:

The dotnetup manifest at <path> is corrupt. Consider deleting it and re-running the install.

訊息也可能表示檔案是在 dotnetup 之外修改的。

原因: 檔案 dotnetup_manifest.json 無效。 可能是其他流程或手動編輯改變了檔案。

解決方案: 從 dotnetup 資料目錄中刪除資訊清單檔案及其 .sha256 檔案。 然後,重新安裝你需要的 SDK 和執行環境。 因為清單不再追蹤現有的安裝根目錄,你可能還需要先刪除那個資料夾。 關於資料目錄的位置,請參見 更新或移除 dotnetup。

Note

不要編輯清單檔案。 用 dotnetup 指令來改變追蹤狀態。

設定檔損壞了

症狀: 一個指令顯示以下警告:

Warning: The dotnetup config file at <path> appears to be corrupted and could not be read: ...

原因:dotnetup.config.json 檔案無效。 dotnetup 忽略檔案。

解決方案: 用你想要的存取模式跑 dotnetup env set ,或者再跑 dotnetup init 一次。 這些指令會寫入新的設定。

shell 設定檔包含格式錯誤的 dotnetup 區塊

症狀: 指令 env 失敗時會出現類似以下訊息的錯誤:

The shell profile '<path>' contains a malformed dotnetup block: '<begin marker>' does not have a matching '<end marker>'. Remove or repair the block manually and try again.

原因:dotnetup 用開始與結束註解標記它在 shell 設定檔中新增的行。 其中一則留言缺失了。

解決方案: 在文字編輯器中開啟 shell 設定檔。 移除不完整的 dotnetup 區塊,或新增缺少的標記。 然後再次執行命令。

Elevation 已取消

症狀:在 Windows 上,開啟或關閉 everywhere 模式的指令會顯示以下訊息:

Elevation was cancelled. The system PATH was not modified.

原因: 系統的變更 PATH 需要提高權限。 使用者帳號控制(UAC)提示被取消。

解決方案: 再執行一次指令並核准 UAC 提示。 或者,選擇 shell 或 none 存取模式,這不需要提升權限。

發行資訊清單已過期

症狀: 安裝或更新在驗證發佈資訊清單時失敗,並顯示 ExpiredNow 失敗代碼。

原因: 目前系統時間是在清單到期時間或之後。 資訊清單可能已過期,或系統時鐘錯誤。 有效的簽名並不代表過期的清單是可接受的。

Solution:

  1. 請檢查系統的日期和時間。 必要時校準時鐘。
  2. 請重試該指令。 如果代理伺服器提供快取的釋出元資料,請管理員檢查該代理是否提供過期的資訊清單。
  3. 如果時脈正確且故障持續,請以指令的詳細輸出回報問題。

不要編輯資訊清單或更改時鐘來繞過到期檢查。 欲了解更多資訊,請參閱資訊清單到期。

安裝被 IT 政策阻擋

症狀: 每日或預發布版本的安裝失敗時,會跳出訊息說 IT 政策要求經程式碼簽署的下載內容。

原因: 管理員阻止了該機器上的未簽署下載。

解決方案: 安裝已發佈版本,或請管理員清除該原則設定。 欲了解更多資訊,請參閱 dotnetup 如何驗證下載。

回報問題

如果這篇文章無法解決你的問題,請搜尋 現有的 dotnetup 相關問題。 如果找不到匹配的,就用 dotnetup 問題範本在 dotnet/sdk 倉庫中開啟新議題。 包含 dotnetup --info 的輸出與失敗指令的輸出,並搭配 --verbosity detailed。

如有問題或建議,請使用 dotnetup 討論區。

也請參閱