使用 Snap 安裝 .NET SDK
本文描述如何安裝 .NET SDK Snap 套件。 .NET SDK Snap 套件是由 Canonical 提供和維護。 Snap 是 Linux 發行版本內建套件管理員的絕佳替代方案。
Snap 是應用程式及其相依性的套件組合,可在許多不同的 Linux 發行版本上運作。 您可從 Snap Store 探索和安裝 Snap。 有關 Snap 的更多資訊,請參閱快速入門教程。
警告
.NET 的 Snap 安裝可能有執行 .NET 工具的問題。 如果您想要使用 .NET 工具,建議您針對特定 Linux 發行版本使用 dotnet-install
指令碼或套件管理員來安裝 .NET。
這是透過 Snap 安裝 .NET 時,dotnet watch
命令無法運作的已知問題。
如果您即將使用 .NET 工具或 dotnet watch
命令,建議您使用 dotnet-install
指令碼來安裝 .NET。
必要條件
- 支援 Snap 的 Linux 發行版本。
- 對 Snap 精靈執行
snapd
。
您的 Linux 發行版本可能已包含 Snap。 請嘗試從終端執行 snap
,以查看命令是否正常運作。 如需支援的 Linux 發行版本清單,以及如何安裝 Snap 的指示,請參閱安裝 snapd
。
.NET 版本
Microsoft 會在兩個不同的支援原則下發佈 .NET:長期支援 (LTS) 和標準期限支援 (STS)。 所有版本的品質都一樣。 唯一的差異是支援的時間長度。 LTS 版本提供 3 年的免費支援和修補程式。 STS 版本可獲得 18 個月的免費支援和修補檔。 如需詳細資訊,請參閱 .NET 支援原則 (英文)。
Microsoft 目前支援的 .NET 版本如下:
- 9.0 (STS)— 支援將於 2026 年 5 月結束。
- 8.0 (LTS)—支援將於 2026 年 11 月 10 日結束。
其他建置和發行 .NET 的實體可能會引入不同的支援原則。 請務必洽詢這些實體,以瞭解對 .NET 的支援方式。
1.安裝 SDK
重要
.NET 9 於 2024 年 11 月 12 日發行。 套件管理員摘要中或特定 Linux 散發套件可能需要一段時間才能包含套件。
.NET SDK 的 Snap 套件全都以相同的識別碼發佈:dotnet-sdk
。 您可藉由指定通道來安裝特定版本的 SDK。 SDK 包含 ASP.NET Core 和 .NET 執行階段,版本與 SDK 一致。
提示
Snapcraft .NET SDK 套件頁面包含如何安裝 Snapcraft 和 .NET 的發行版本特定指示。
開啟終端機。
使用
snap install
安裝 .NET SDK Snap 套件。 例如,下列命令會安裝預設latest/stable
通道。sudo snap install dotnet-sdk --classic
--classic
是必要參數。- 使用
--channel
參數來指定要安裝的版本。 如果省略此參數,則會使用latest/stable
。 例如,--channel 8.0/stable
會安裝 .NET SDK 8.0。
系統會自動建立 dotnet
Snap 別名,並對應至 Snap 套件的 dotnet
命令。
下表列出您可以安裝的套件通道:
.NET 版本 | Snap 套件通道 |
---|---|
9 (STS) | *尚未提供 |
8 (LTS) | 8.0/stable lts/stable |
7 (STS) | 7.0/stable (不支援) |
6 (LTS) | 6.0/stable (不支援) |
5 | 5.0/stable (不支援) |
3.1 | 3.1/stable (不支援) |
2.1 | 2.1/stable (不支援) |
2.匯出安裝位置
DOTNET_ROOT
環境變數通常由工具用來判斷安裝 .NET 的位置。 透過 Snap 安裝 .NET 時,不會設定此環境變數。 您應該在設定檔中設定 DOTNET_ROOT 環境變數。 Snap 的路徑使用下列格式:/snap/{package}/current
。
export DOTNET_ROOT=/snap/dotnet-sdk/current
永久匯出環境變數
上述 export
命令只會設定其執行所在終端機工作階段的環境變數。
您可以編輯殼層設定檔,永久新增命令。 有許多不同殼層可供 Linux 使用,且每個殼層都有不同的設定檔。 例如:
- Bash 殼層:~/.bash_profile、~/.bashrc
- Korn 殼層:~/.kshrc 或 .profile
- Z 殼層:_~/.zshrc* or .zprofile
編輯殼層的適當原始程式檔,並新增 export DOTNET_ROOT=/snap/dotnet-sdk/current
。
3.使用 .NET CLI
開啟終端機並輸入 dotnet
。
dotnet
下列輸出隨即顯示:
Usage: dotnet [options]
Usage: dotnet [path-to-application]
Options:
-h|--help Display help.
--info Display .NET information.
--list-sdks Display the installed SDKs.
--list-runtimes Display the installed runtimes.
path-to-application:
The path to an application .dll file to execute.
若要了解如何使用 .NET CLI,請參閱 .NET CLI 概觀。
疑難排解
dotnet 終端命令無作用
Snap 套件可以將別名對應至套件所提供的命令。 根據預設,.NET SDK Snap 套件會建立 dotnet
命令的別名。 如果未建立或先前移除了別名,下列命令會顯示如何對應別名:
sudo snap alias dotnet-sdk.dotnet dotnet
無法在 WSL2 上安裝 Snap
必須先在 WSL2 執行個體上啟用 systemd
,才能安裝 Snap。
以選擇的文字編輯器開啟
/etc/wsl.conf
。貼上下列組態:
[boot] systemd=true
儲存檔案,並透過 PowerShell 重新啟動 WSL2 執行個體。 使用
wsl.exe --shutdown
命令。
無法解析 dotnet 命令或 SDK
其他應用程式 (例如 Visual Studio Code 中的程式碼 IDE 或延伸模組) 嘗試解析 .NET SDK 的位置很常見。 一般而言,探索的進行方式是檢查 DOTNET_ROOT
環境變數,或找出 dotnet
可執行檔所在的位置。 已安裝 Snap 的 .NET SDK 可能讓這些應用程式混淆。 當這些應用程式無法解析 .NET SDK 時,就會顯示類似下列其中一則訊息的錯誤:
- 找不到指定的 SDK 'Microsoft.NET.Sdk'
- 找不到指定的 SDK 'Microsoft.NET.Sdk.Web'
- 找不到指定的 SDK 'Microsoft.NET.Sdk.Razor'
請嘗試下列步驟來修正此問題:
嘗試以符號將 Snap
dotnet
可執行檔連結到程式要尋找的位置。dotnet
命令正在尋找的兩個常見路徑如下:/usr/local/bin/dotnet
/usr/share/dotnet
使用下列命令來建立 Snap 套件的符號連結:
ln -s /snap/dotnet-sdk/current/dotnet /usr/local/bin/dotnet
TLS/SSL 憑證錯誤
透過 Snap 安裝 .NET 時,在某些發行版本上可能找不到 .NET TLS/SSL 憑證,而且您可能在 restore
期間收到錯誤:
Processing post-creation actions...
Running 'dotnet restore' on /home/myhome/test/test.csproj...
Restoring packages for /home/myhome/test/test.csproj...
/snap/dotnet-sdk/27/sdk/2.2.103/NuGet.targets(114,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [/home/myhome/test/test.csproj]
/snap/dotnet-sdk/27/sdk/2.2.103/NuGet.targets(114,5): error : The SSL connection could not be established, see inner exception. [/home/myhome/test/test.csproj]
/snap/dotnet-sdk/27/sdk/2.2.103/NuGet.targets(114,5): error : The remote certificate is invalid according to the validation procedure. [/home/myhome/test/test.csproj]
若要解決此問題,請設定幾個環境變數:
export SSL_CERT_FILE=[path-to-certificate-file]
export SSL_CERT_DIR=/dev/null
憑證位置會因散發而有所不同。 以下是發現問題的發行版本位置:
Distribution | Location |
---|---|
Fedora | /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem |
OpenSUSE \(英文\) | /etc/ssl/ca-bundle.pem |
Solus | /etc/ssl/certs/ca-certificates.crt |