.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
這是由更新導致的,當前的 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包。