Ubuntu 上的 .NET 概觀

本文描述如何在 Ubuntu 上安裝 .NET。 從 Ubuntu 22.04 開始,內建的 Ubuntu 摘要中提供大多數支援的 .NET 版本。 Ubuntu .NET backports 套件存放庫包含其餘支援的 .NET 版本,但這些 Ubuntu 版本的內建 Ubuntu 套件摘要沒有提供這些 .NET 版本。 如需可用版本的詳細資訊,請參閱支援的發行版本 (部分機器翻譯) 一節。 此外,對於 Ubuntu 23.10 和先前版本,Microsoft 套件存放庫包含目前或先前支援的每個 .NET 版本。

警告

建議您選擇 Ubuntu 或 Microsoft 摘要取得 .NET 套件。 請勿混合來自多個套件存放庫的 .NET 套件,因為當應用程式嘗試解析特定版本的 .NET 時,會導致問題。

方法 優點 缺點
套件管理員
(內建的
Ubuntu 摘要)
  • 通常會提供最新版本。
  • 正確提供修補檔。
  • 包含相依性。
  • 輕鬆移除。
  • 特定 Ubuntu 版本的支援期間支援可用的 .NET 版本。
  • 在 Ubuntu 24.04 上的 .NET 8 支援 IBM System Z 平台。
  • Ubuntu 16.04、18.04、20.04 未提供。
  • 可用的 .NET 版本會因 Ubuntu 版本而異。
  • 未提供預覽版本。
套件管理員
(.NET backports
Ubuntu 摘要)
  • 包含任何支援的版本,不包含在內建的 Ubuntu 摘要中。
  • 正確提供修補檔。
  • 包含相依性。
  • 輕鬆移除。
  • 與內建的 Ubuntu 摘要相容。
  • Ubuntu 16.04、18.04、20.04 未提供。
  • 需要註冊 Ubuntu .NET backports 套件存放庫。
  • 未提供預覽版本。
套件管理員
(Microsoft 摘要)
  • 一律提供支援的版本。
  • 正確提供修補檔。
  • 包含相依性。
  • 輕鬆移除。
  • Ubuntu 24.04+ 未提供。
  • 需要註冊 Microsoft 套件存放庫。
  • 未提供預覽版本。
  • 僅支援 x64 Ubuntu。
指令碼 \ 手動擷取
  • 控制安裝 .NET 的位置。
  • 提供預覽版本。
  • 手動安裝更新。
  • 手動安裝相依性。
  • 手動移除。

決定如何安裝 .NET

當您的 Ubuntu 版本透過內建的 Ubuntu 摘要或 .NET backports Ubuntu 摘要支援 .NET 時,Canonical 會提供對那些 .NET 組建的支援,而且組建可能會針對不同的工作負載進行最佳化。 Microsoft 支援 Microsoft 套件存放庫摘要中的套件。

使用下列各節來判斷您應該如何安裝 .NET:

我使用的是 Ubuntu 22.04,而且我只需要 .NET

透過 Ubuntu 摘要安裝 .NET。 如需詳細資訊,請參閱下列頁面:

重要

Canonical 提供的 .NET SDK 版本一律位於 .1xx 功能區。 如果您想要使用較新的功能區版本,請使用 Microsoft 摘要來安裝 SDK。 請務必檢閱 .NET 套件在 Linux 上混合 (部分機器翻譯) 的文章資訊,以了解在存放庫摘要之間切換的影響。

如果您要安裝其他 Microsoft 存放庫以使用其他 Microsoft 套件 (例如 powershellmdatpmssql),則必須取消設定 Microsoft 存放庫所提供之 .NET 套件的優先順序。 如需如何取消設定套件優先順序的相關指示,請參閱我的 Linux 發行版本提供 .NET 套件,而且我想要使用這些套件 (部分機器翻譯)。

我使用 22.04 之前的 Ubuntu 版本

使用版本特定 Ubuntu 頁面上的指示。

如需您的 Ubuntu 版本所支援之 .NET 版本的詳細資訊,請參閱支援的發行版本 (部分機器翻譯) 一節。 如果您要安裝不支援的版本,請參閱註冊 Microsoft 套件存放庫 (部分機器翻譯)。

我使用其他 Microsoft 套件,例如 powershellmdatpmssql

如果您的 Ubuntu 版本透過 Ubuntu 摘要支援 .NET,則您必須決定哪一個摘要應該安裝 .NET。 支援的發行版本一節提供一個表格,其中列出套件摘要中提供哪些 .NET 版本。

如果您想要從 Ubuntu 摘要取得 .NET 套件,您必須取消設定 Microsoft 存放庫所提供的 .NET 套件優先順序。 如需如何取消設定套件優先順序的相關指示,請參閱我的 Linux 發行版本提供 .NET 套件,而且我想要使用這些套件 (部分機器翻譯)。

我想要建立 .NET 應用程式

針對 SDK 使用與您針對執行階段使用相同的套件來源。 建議您透過 Ubuntu 摘要安裝 .NET。 不過,如果您想要從另一個來源 (例如 Microsoft 套件存放庫安裝 .NET 以存取較高的 SDK 功能範圍),您應該解除安裝 .NET、設定套件管理員忽略 Ubuntu 摘要中的 .NET 套件,並從其他來源重新安裝它。

請檢閱決定如何安裝 .NET 一節中的其他建議。

我想要在容器、雲端或持續整合案例中執行 .NET 應用程式

如果您的 Ubuntu 版本提供您所需的 .NET 版本,請從 Ubuntu 摘要加以安裝。 否則,註冊 Microsoft 套件存放庫 (部分機器翻譯),然後從該存放庫安裝 .NET。 請檢閱支援的發行版本 (部分機器翻譯) 一節中的資訊。

如果無法取得您所需的 .NET 版本,請嘗試使用 dotnet-install 指令碼 (部分機器翻譯)。

我的 Ubuntu 發行版本並未包含我想要的 .NET 版本,或者,我需要不支援的 .NET 版本

建議您使用 APT 與 Microsoft 套件存放庫。 如需詳細資訊,請參閱向 Microsoft 套件存放庫註冊並安裝 (部分機器翻譯) 一節。

我想要安裝預覽版本

使用下列其中一種方式來安裝 .NET:

我不想使用 APT

如果您想要自動安裝,請使用 Linux 安裝指令碼 (部分機器翻譯)。

如果您想要完全控制 .NET 安裝體驗,請下載 tarball 並手動安裝 .NET。 如需詳細資訊,請參閱手動安裝 (部分機器翻譯)。

我使用 Arm 型 CPU

如果您的 Ubuntu 版本提供您所需的 .NET 版本,請從內建摘要加以安裝。 請檢閱支援的發行版本 (部分機器翻譯) 一節中的資訊。

如果無法取得您所需的 .NET 版本,請嘗試使用下列其中一種方法安裝 .NET:

我使用 IBM System Z 平台

從 Ubuntu 24.04 上的 .NET 8 開始,Canonical 支援 IBM System Z 平台的 .NET。 Canonical 將支援延伸至其他 .NET 和 Ubuntu 版本。

透過內建的 Ubuntu 摘要安裝 .NET。 如需詳細資訊,請參閱下列頁面:

支援的發行版本

下表是目前支援的 .NET 版本清單,以及其支援的 Ubuntu 版本。 每個連結都會移至特定的 Ubuntu 版本頁面,其中包含如何針對該 Ubuntu 版本安裝 .NET 的特定指示。

Ubuntu 支援的 .NET 版本 Available in
內建的 Ubuntu 摘要

.NET backports
Ubuntu 摘要中提供

Microsoft 摘要中提供
24.04 (LTS) 8.0、6.0 8.0 7.0、6.0
23.10 8.0、6.0 8.0、7.0、6.0 8.0、7.0、6.0
22.04 (LTS) 8.0、6.0 8.0、7.0、6.0 8.0、7.0、6.0、3.1
20.04 (LTS) (部分機器翻譯) 8.0、6.0 8.0、7.0。 6.0、5.0、3.1、2.1
18.04 (LTS) (部分機器翻譯) 6.0 7.0。 6.0、5.0、3.1、2.2、2.1
16.04 (LTS) (部分機器翻譯) 6.0 6.0、5.0、3.1、3.0、2.2、2.1、2.0

Ubuntu 版本到達其支援期間時,該特定 Ubuntu 版本就不再支援 .NET。

Canonical 支援該 Ubuntu 版本存留期的內建 Ubuntu 摘要中的 .NET 版本 (即使超過 Microsoft 提供的支援存留期),也為 .NET backports 套件存放庫中的 .NET 版本提供最佳支援 (但不會超過 Microsoft 提供的支援存留期)。

下列版本的 .NET ❌ 已不再支援:

  • .NET 7
  • .NET 5
  • .NET Core 3.1
  • .NET Core 3.0
  • .NET Core 2.2
  • .NET Core 2.1
  • .NET Core 2.0

Ubuntu .NET backports 套件存放庫

Ubuntu .NET backports 套件存放庫提供 .NET 版本,內建的 Ubuntu 摘要沒有提供這些 .NET 版本。 支援的發行版本一節提供一個表格,其中列出套件摘要中提供哪些 .NET 版本。 Canonical 會維護此套件存放庫中所包含的套件,並提供最佳支援,不會超過 Microsoft 提供的支援存留期或特定 Ubuntu 版本的支援期間。

如需詳細資料,請參閱 Ubuntu .NET backports 套件存放庫的網頁檢視

註冊 Ubuntu .NET backports 套件存放庫

開啟終端機,並執行下列命令:

sudo add-apt-repository ppa:dotnet/backports

提示

您不需要呼叫 apt updateadd-apt-repository 命令預設會執行此動作。

注意

Ubuntu .NET backports 套件存放庫與內建的 Ubuntu 摘要相容。 因此,您不需要將套件管理員設定為忽略內建 Ubuntu 摘要中的 .NET 套件。

取消註冊 Ubuntu .NET backports 套件存放庫

如果您不想再從 Ubuntu .NET backports 套件存放庫取用套件,您可以將其取消註冊。 開啟終端機,並執行下列命令:

sudo add-apt-repository --remove ppa:dotnet/backports

重要

取消註冊 Ubuntu .NET backports 套件存放庫並不會解除安裝任何套件。

找不到 add-apt-repository 命令

add-apt-repository(1) 公用程式已在大多數 Ubuntu 安裝上預先安裝。

如果您收到找不到 add-apt-repository 命令的錯誤訊息,您必須安裝提供此命令的 software-properties-common 套件。 開啟終端機,然後執行下列命令:

sudo apt update
sudo apt install software-properties-common

註冊 Microsoft 套件存放庫

Microsoft 套件存放庫包含先前或目前您的 Ubuntu 版本支援的所有 .NET 版本。 如果您的 Ubuntu 版本提供 .NET 套件,您將必須取消設定 Ubuntu 套件的優先順序,並使用 Microsoft 存放庫。 如需如何取消設定套件優先順序的指示,請參閱我需要 Linux 發行版本未提供的 .NET 版本 (部分機器翻譯)。

重要

Microsoft 套件存放庫僅支援以 x64 架構為目標的 .NET 套件。 其他架構 (例如 Arm) 必須透過一些其他方式安裝 .NET,例如,透過安裝程式指令碼 (部分機器翻譯) 或手動安裝 (部分機器翻譯)。

Microsoft 套件存放庫中提供預覽版本。 如需詳細資訊,請參閱安裝預覽版本 (部分機器翻譯)。

警告

建議您只使用一個存放庫來管理您的所有 .NET 安裝。 如果您先前已使用 Ubuntu 存放庫安裝 .NET,就必須清除 .NET 套件系統,並將 APT 設定為忽略 Ubuntu 摘要。 如需如何執行此操作的詳細資訊,請參閱我需要 Linux 發行版本未提供的 .NET 版本 (部分機器翻譯)。

您可以使用幾個命令來使用 APT 完成安裝。 請在安裝 .NET 之前,執行下列命令,以將 Microsoft 套件簽署金鑰新增至信任的金鑰清單,然後新增套件存放庫。

開啟終端機,然後執行下列命令:

# Get OS version info which adds the $ID and $VERSION_ID variables
source /etc/os-release

# Download Microsoft signing key and repository
wget https://packages.microsoft.com/config/$ID/$VERSION_ID/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

# Install Microsoft signing key and repository
sudo dpkg -i packages-microsoft-prod.deb

# Clean up
rm packages-microsoft-prod.deb

# Update packages
sudo apt update

提示

先前的指令碼是針對 Ubuntu 所撰寫的,如果您使用衍生的發佈版本 (例如 Linux Mint),則它可能無法運作。 $repo_version 變數可能不會指派正確的值,使 wget 命令的 URI 無效。 此變數會對應至您想要取得套件的特定 Ubuntu 版本,例如 22.04 或 23.10。

您可以使用網頁瀏覽器並瀏覽至 https://packages.microsoft.com/config/ubuntu/ ,以查看哪些 Ubuntu 版本可用來作為 $repo_version 值。

安裝 .NET

當您註冊 Microsoft 套件存放庫之後,或者,如果 Ubuntu 摘要支援您 Ubuntu 版本的 .NET 套件,您可以使用 sudo apt install <package-name> 命令,透過套件管理員安裝 .NET。 以您想要安裝的 .NET 套件名稱取代 <package-name>。 例如,若要安裝 .NET SDK 8.0,請使用 sudo apt install dotnet-sdk-8.0 命令。 下表列出目前支援的 .NET 套件:

Products 類型 套件
8.0 ASP.NET Core 執行階段 aspnetcore-runtime-8.0
8.0 .NET 執行階段 dotnet-runtime-8.0
8.0 .NET SDK dotnet-sdk-8.0
6.0 ASP.NET Core 執行階段 aspnetcore-runtime-6.0
6.0 .NET 執行階段 dotnet-runtime-6.0
6.0 .NET SDK dotnet-sdk-6.0

如果您想要安裝不支援的 .NET 版本,請檢查支援的發行版本 (部分機器翻譯) 一節,以查看該版本的 .NET 是否可用。 然後,以您想要安裝的 .NET 版本取代。 例如,若要安裝 ASP.NET Core 8.0,請使用套件名稱 aspnetcore-runtime-8.0

提示

如果您未建立 .NET 應用程式,請安裝 ASP.NET Core 執行階段,因為它包含 .NET 執行階段,同時也支援 ASP.NET Core 應用程式。

某些環境變數會影響 .NET 安裝之後的執行方式。 如需詳細資訊,請參閱 .NET SDK 和 CLI 環境變數 (部分機器翻譯)。

解除安裝 .NET

如果您透過套件管理員安裝 .NET,請使用與 apt-get remove 命令相同的方式來解除安裝:

sudo apt-get remove dotnet-sdk-6.0

如需詳細資訊,請參閱解除安裝 .NET (部分機器翻譯)。

安裝預覽版本

.NET 的預覽版與候選版均無法在套件存放庫中取得。 您可以使用下列其中一種方式來安裝 .NET 的預覽版與候選版:

移除預覽版本

使用套件管理員來管理 .NET 的安裝時,如果您先前已安裝預覽版,可能會發生衝突。 套件管理員可能會將非預覽版理解為舊版 .NET。 若要安裝非預覽版本,請先解除安裝預覽版本。 如需解除安裝 .NET 的詳細資訊,請參閱如何移除 .NET Runtime 和 SDK (部分機器翻譯)。

使用 APT 更新 .NET

如果您透過套件管理員安裝 .NET,您可以使用 apt upgrade 命令來升級套件。 例如,下列命令使用最新版本來升級 dotnet-sdk-8.0 套件:

sudo apt update
sudo apt upgrade dotnet-sdk-8.0

提示

如果您已在安裝 .NET 之後升級 Linux 發行版本,可能需要重新設定 Microsoft 套件存放庫。 執行您目前發行版本的安裝指示,以升級至 .NET 更新適用的套件存放庫。

疑難排解

從 Ubuntu 22.04 開始,您可能會遇到似乎只有一段 .NET 可用的情況。 例如,您已安裝執行階段和與 SDK,但在執行 dotnet --info 時,只會列出執行階段。 這種情況可能與使用兩個不同的套件來源有關。 內建的 Ubuntu 22.04 與 Ubuntu 22.10 套件摘要包含某些 .NET 版本,但並非全部,而您可能也已從 Microsoft 摘要安裝 .NET。 如需如何修正此問題的詳細資訊,請參閱針對與 Linux 上遺失檔案相關的 .NET 錯誤進行疑難排解 (部分機器翻譯)。

APT 問題

本節提供您在使用 APT 安裝 .NET 時可能遇到的常見錯誤相關資訊。

找不到套件

重要

使用套件管理員從 Microsoft 套件摘要安裝 .NET,僅支援 x64 結構。 Microsoft 套件摘要不支援其他結構,例如 Arm

如需在沒有套件管理員的情況下安裝 .NET 的詳細資訊,請參閱下列其中一篇文章:

找不到 \ 某些套件無法安裝

注意

此資訊僅適用於從 Microsoft 套件摘要安裝 .NET 時。

如果您收到類似找不到套件 {dotnet-package}某些套件無法安裝的錯誤訊息,請執行下列命令。

下列這組命令中有兩個預留位置。

  • {dotnet-package}
    這代表您要安裝的 .NET 套件,例如 aspnetcore-runtime-8.0。 這會在下列 sudo apt-get install 命令中使用。

首先,嘗試清除套件清單:

sudo dpkg --purge packages-microsoft-prod && sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update

接著,嘗試再次安裝 .NET。 如果無法運作,您可以使用下列命令來執行手動安裝:

如果您使用 Ubuntu 23.10 或更新版本,請嘗試下列命令:

# Get OS version info which adds the $ID and $VERSION_ID variables
source /etc/os-release

# Download the Microsoft keys
sudo apt-get install -y gpg wget
wget https://packages.microsoft.com/keys/microsoft.asc
cat microsoft.asc | gpg --dearmor -o microsoft.asc.gpg

# Add the Microsoft repository to the system's sources list
wget https://packages.microsoft.com/config/$ID/$VERSION_ID/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list

# Move the key to the appropriate place
sudo mv microsoft.asc.gpg $(cat /etc/apt/sources.list.d/microsoft-prod.list | grep -oP "(?<=signed-by=).*(?=\])")

# Update packages and install .NET
sudo apt-get update && \
  sudo apt-get install -y {dotnet-package}

如果您使用 23.10 之前的 Ubuntu 版本,請嘗試下列命令:

# Define the OS version, name, and codename
source /etc/os-release

# Download the Microsoft keys
sudo apt-get install -y gpg wget
wget https://packages.microsoft.com/keys/microsoft.asc
cat microsoft.asc | gpg --dearmor -o microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/

# Add the Microsoft repository to the system's sources list
wget https://packages.microsoft.com/config/$ID/$VERSION_ID/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list

# Set ownership
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list

# Update packages and install .NET
sudo apt-get update && \
  sudo apt-get install -y {dotnet-package}

無法擷取

安裝 .NET 套件時,您可能會看到類似 Failed to fetch ... File has unexpected size ... Mirror sync in progress? 的錯誤。 此錯誤可能表示 .NET 的套件摘要正在以較新的套件版本進行升級,而您應該稍後再試一次。 在升級期間,套件摘要不應超過 30 分鐘無法使用。 如果您持續收到此錯誤超過 30 分鐘,請在 https://github.com/dotnet/core/issues 中提出問題。

相依性

當您使用套件管理員安裝時,系統會為您安裝這些程式庫。 但是,如果您手動安裝 .NET 或發佈獨立式應用程式,就必須安裝這些相依性來執行應用程式:

  • ca-certificates
  • libc6
  • libgcc1 (適用於 16.x 和 18.x)
  • libgcc-s1 (適用於 20.x 或更新版本)
  • libgssapi-krb5-2
  • libicu55 (適用於 16.x)
  • libicu60 (適用於 18.x)
  • libicu66 (適用於 20.x)
  • libicu70 (適用於 22.04)
  • libicu72 (適用於 23.10)
  • libicu74 (適用於 24.04 或更新版本)
  • liblttng-ust1 (適用於 22.x 或更新版本)
  • libssl1.0.0 (適用於 16.x)
  • libssl1.1 (適用於 18.x、20.x)
  • libssl3 (適用於 22.x 或更新版本)
  • libstdc++6
  • libunwind8 (適用於 22.x 或更新版本)
  • zlib1g

您可以使用 apt install 命令來安裝相依性。 下列程式碼片段示範如何安裝 zlib1g 程式庫:

sudo apt install zlib1g

如果 .NET 應用程式使用 System.Drawing.Common 組件,則也需安裝 libgdiplus。 因為 Linux 上不再支援 System.Drawing.Common,所以這只適用於 .NET 6,而且需要設定 System.Drawing.EnableUnixSupport 執行階段組態參數。

您可以將 Mono 存放庫新增至您的系統 (英文),以安裝最新版的 libgdiplus

下一步