.NET
.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包。