.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

参阅[编辑 | 编辑源代码]