.NET

出自 Arch Linux 中文维基

.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.0dotnet-sdk-6.0aspnet-runtime-6.0

版本區別[編輯 | 編輯原始碼]

.NET SDKs are published under several version schemes. Only SDK versions 1xx can be built from source and will be available in the official repositories. Should you require any other version you will need one of the *-bin packages from AUR.

手動安裝多個版本[編輯 | 編輯原始碼]

你可以通過執行 .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 安裝多個版本[編輯 | 編輯原始碼]

Some of the AUR dotnet packages are made to be installed alongside each other. Only one host package (dotnet-host-binAUR or dotnet-host) is needed containing the command-line tool and you can install any of the available SDKs and Runtimes (latest packages of all major versions) next to it. List of compatible packages:

安裝 PowerShell Core[編輯 | 編輯原始碼]

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

# dotnet tool install --global PowerShell

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

# dotnet tool update --global PowerShell

遙測[編輯 | 編輯原始碼]

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

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

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

Tab 自動補全[編輯 | 編輯原始碼]

All dotnet programs that use System.CommandLine.Parser to parse their arguments have auto-complete support. Enabling it just requires adding a few lines to your .bashrc / .zshrc file, as described in their documentation. Instructions for standalone binaries are here.

故障排除[編輯 | 編輯原始碼]

It was not possible to find any compatible framework version[編輯 | 編輯原始碼]

If you get the following error when you try to run a newly created project, you no longer need to set a DOTNET_ROOT variable as described in the solutions of various GitHub issues. Arch's dotnet package (as of 3.1) installs it to the Microsoft recommended location of /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

This is caused because the runtime is shipped as a separate package in Arch. You just need to make sure you have the aspnet-runtime package installed as well.

"the required library libhostfxr.so could not be found" error[編輯 | 編輯原始碼]

Some of the dotnet SDK tools (for example libman, dotnet-watch etc.) may expect you to have the environment variable DOTNET_ROOT pre-configured. If it is not, an error like this one could be observed: [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.

The workaround is to manually export DOTNET_ROOT in your shell:

~/.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.[編輯 | 編輯原始碼]

This happens after an update. The currently running shell / login session is storing environment variables for the dotnet SDK version different from one installed. Restarting the shell or logging in again should fix this.

無法找到指定的 SDK[編輯 | 編輯原始碼]

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

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

dotnet command still installed[編輯 | 編輯原始碼]

Installed packages do not uninstall dotnet-host, so uninstall dotnet-host

參閱[編輯 | 編輯原始碼]