.NET - Arch Linux 中文维基

跳至內容

# .NET

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 .NET，最近一次同步於 2025-01-11，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- PowerShell

.NET（舊稱 .NET Core）是 Microsoft 開發的開源軟體框架，支持 C#, Visual Basic 和 F#。和之前的 .NET Framework 相比，它支持跨平台開發，設計上更加模塊化，面向現代程序開發。

.NET 源碼位於存放在 Github 上的 dotnet/dotnet。

## 安裝

如果要運行 .NET 管理的程序，請安裝 dotnet-runtime包。

要使用 .NET 編譯程序，還需要安裝 dotnet-sdk包。

要使用 ASP.NET Core 建立動態網站，應用和服務，安裝 aspnet-runtime包.

微軟推薦使用 Visual Studio Code 編譯和調試 .NET 程序，它是微軟開發的基於 Electron 的開源 IDE。

提示：將 `~/.dotnet/tools` 加入 `PATH`，否則 dotnet 工具無法在 shell 中啟動。

如果要使用 .NET 6.0，將上述包加上「-6.0」後綴即可（例如 dotnet-runtime-6.0包，dotnet-sdk-6.0包 和 aspnet-runtime-6.0包）

### 版本區別

.NET SDK 有多個版本，只有 `1xx` 版本可從源碼構建，並在官方倉庫中提供。如果需要其它版本，可以在 AUR 中查找對應的 `*-bin` 包。

### 手動安裝多個版本

你可以通過執行 .NET 官方提供的 dotnet-install.sh 腳本來同時安裝 .NET SDK 或 .NET 運行時的多個版本。另外，你可以在此連結中找到關於這個腳本的說明。

例如，該命令將安裝「STS」（標準期限支持）頻道的最新版本到 `/usr/share/dotnet`：

    # ./dotnet-install.sh --install-dir /usr/share/dotnet -channel STS -version latest

你可以先使用 `-Dryrun` 來模擬安裝。

腳本執行完畢後，你可以通過以下命令來驗證是否安裝成功：

    $ dotnet --list-sdks

    2.2.108 [/usr/share/dotnet/sdk]
    3.0.103 [/usr/share/dotnet/sdk]

    $ dotnet --version

    3.0.103

### 手動卸載已安裝版本

官方提供的卸載工具 .NET Uninstall Tool 尚無 Linux 支持，如果你想卸載以前通過 `dotnet-install.sh` 腳本安裝的過時版本，需要手動操作。

    $ dotnet --list-sdks

    5.0.100 [/usr/share/dotnet/sdk]
    5.0.102 [/usr/share/dotnet/sdk]

解除特定版本的安裝：

    $ SDK_VERSION="5.0.100"
    $ DOTNET_UNINSTALL_PATH="/usr/share/dotnet"
    # rm -rf $DOTNET_UNINSTALL_PATH/sdk/$SDK_VERSION

`dotnet-install.sh` 同時會安裝 dotnet host 及共享包，根據版本不同可能需要單獨進行移除。

你可能會安裝了一些額外的依賴，通過下面的命令移除他們：

    $ SDK_VERSION="5.0.100"
    $ DOTNET_VERSION="5.0.0"
    $ DOTNET_UNINSTALL_PATH="/usr/share/dotnet"
    # rm -rf $DOTNET_UNINSTALL_PATH/sdk/$SDK_VERSION
    # rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.NETCore.App/$DOTNET_VERSION
    # rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.AspNetCore.All/$DOTNET_VERSION
    # rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.AspNetCore.App/$DOTNET_VERSION
    # rm -rf $DOTNET_UNINSTALL_PATH/host/fxr/$DOTNET_VERSION

### 通過 AUR 安裝多個版本

有些 AUR dotnet 包可以被同時安裝。只需要安裝 (dotnet-host-binAUR 或 dotnet-host包) 獲取命令行工具，就可以安裝任意大版本的最新 SDK 和運行時。以下為兼容的包：

- dotnet-host-binAUR, dotnet-runtime-binAUR, aspnet-runtime-binAUR, dotnet-sdk-binAUR
- dotnet-host-preview-binAUR, dotnet-runtime-preview-binAUR, aspnet-runtime-preview-binAUR, dotnet-sdk-preview-binAUR
- dotnet-runtime-7.0-binAUR, aspnet-runtime-7.0-binAUR, dotnet-sdk-7.0-binAUR,
- dotnet-runtime-3.0AUR, aspnet-runtime-3.0AUR, dotnet-sdk-3.0AUR,
- dotnet-runtime-2.2AUR, aspnet-runtime-2.2AUR, dotnet-sdk-2.2AUR, dotnet-sdk-2.2-vs2017AUR
- dotnet-runtime-2.1AUR, aspnet-runtime-2.1AUR, dotnet-sdk-2.1AUR

### 安裝 PowerShell Core

你可以將 PowerShell Core 安裝為「全局」工具 [1] [2]

    # dotnet tool install --global PowerShell

按如下方法將其升級到最新版本

    # dotnet tool update --global PowerShell

另請參考 PowerShell。

## 遙測

Microsoft 構建的 .NET SDK 默認啟用遙測。AUR .NET SDK 包（`*-bin` 變體）基於 Microsoft 構建的 .NET。.NET 運行時組件在任何情況下都不收集遙測信息。

社區構建版本（包括 Arch；從 .NET 7 開始）不收集遙測數據，這是由 Red Hat 對 .NET SDK 做出的更改。

可以通過設置環境變量 `DOTNET_CLI_TELEMETRY_OPTOUT=1` 來關閉遙測。

## Tab 自動補全

所有使用 `System.CommandLine.Parser` 解析命令行選項的 dotnet 程序都支持自動補全。要啟用該功能，需按照文檔在 `.bashrc` / `.zshrc` 中添加數行內容。 對於獨立的二進制文件，需參考這裡。

## 故障排除

### It was not possible to find any compatible framework version

如果在運行新創建的項目時出現了如下報錯，不需要按各種 GitHub issue 中的描述設置 `DOTNET_ROOT` 變量，Arch 提供的 dotnet 包（從 3.1 版本開始）會安裝到微軟建議的 `/usr/share/dotnet` 位置。

    $ dotnet run

    It was not possible to find any compatible framework version
    The framework 'Microsoft.AspNetCore.App', version '3.1.0' was not found.
      - No frameworks were found.

    You can resolve the problem by installing the specified framework and/or SDK.

    The specified framework can be found at:
      - https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=3.1.0&arch=x64&rid=arch-x64

該問題的產生原因是 Arch 將運行時拆分到了單獨的軟體包，你需要確保同時安裝了 aspnet-runtime包。

### "the required library libhostfxr.so could not be found"

有些 dotnet SDK 工具（如 libman、dotnet-watch 等）可能會要求配置 `DOTNET_ROOT` 環境變量。如果沒有配置該變量，就會出現如下報錯：[3]

    A fatal error occurred, the required library libhostfxr.so could not be found.
    If this is a self-contained application, that library should exist in [/home/my_user/.dotnet/tools/.store/microsoft.web.librarymanager.cli/1.0.172/microsoft.web.librarymanager.cli/1.0.172/tools/netcoreapp2.1/any/].
    If this is a framework-dependent application, install the runtime in the default location [/usr/share/dotnet] or use the DOTNET_ROOT environment variable to specify the runtime location.

解決方案是手動在終端環境導出 `DOTNET_ROOT`：

    ~/.bashrc

    export DOTNET_ROOT=/opt/dotnet

### Error MSB4019: The imported project "/usr/share/dotnet/sdk/.../Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.Common.targets" was not found. Confirm that the expression in the Import declaration ... is correct, and that the file exists on disk.

這是由更新導致的，當前的 shell 或登錄會話中環境變量儲存的 dotnet SDK 版本與已安裝版本不同。重新打開 shell 或重新登錄可以解決該問題。

### 無法找到指定的 SDK

這被認為是 Mono 和 MSBuild SDK 庫及 dotnet 庫衝突了。要修正該問題，需參考如下方式手動在 shell 中設置路徑（按需將示例中的版本號替換為實際安裝的版本）：

    ~/.bashrc

    export MSBuildSDKsPath=$( echo /usr/share/dotnet/sdk/3.*/Sdks );

### 仍已安裝 dotnet 命令

已安裝的包不會卸載 dotnet-host，需要手動卸載 dotnet-host包。

## 參閱

- .NET 主頁
- .NET 基金會
- .NET API 瀏覽器

分類：​

- 框架

.NET
新增話題