如何修复我在Linux上安装的.NET 7.0/8.0(SDK)

nzkunb0c  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(190)

直到最近我才在我的Linux机器上安装了.NET 7.x。我工作得很好,构建和运行.NET(特别是C#)项目,安装dotnet工具(Husky.NET,versionize等)。
我决定更新到.NET 8.0,看看所有的模糊是关于什么的,但不知何故,我的安装并没有完全工作(也许是因为我的发行版不支持它,.NET 8仍然是热的从烤箱)。之后,我执行了一系列不稳定的操作,试图保持我以前的设置。
我做了一些事情来解决这个问题:

  • 卸载.NET 8
  • 使用dotnet-install.sh脚本手动安装.NET 8
  • 再次卸载.NET 8,然后卸载.NET 7.0
  • 从安装dotnet SDK文件的任何位置手动删除内容(~/.dotnet/usr/lib/dotnet//usr/share/dotnet/usr/bin/dotnet符号链接)
  • 使用Microsoft包存储库重新安装.NET 7.0(我想我甚至还尝试了Ubuntu的repo包)
    这里有一些故障排除命令,用于测量配置的当前状态。
$ whereis dotnet 
dotnet: /usr/bin/dotnet /usr/lib/dotnet /etc/dotnet /usr/share/dotnet /usr/share/man/man1/dotnet.1.gz
$ which dotnet
/usr/bin/dotnet
$ dotnet
Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

path-to-application:
  The path to an application .dll file to execute.

奇怪的部分来了

无法获取.NET版本:

$ dotnet --version
The command could not be loaded, possibly because:
  * You intended to execute a .NET application:
      The application '--version' does not exist.
  * You intended to execute a .NET SDK command:
      No .NET SDKs were found.

Download a .NET SDK:
https://aka.ms/dotnet/download

Learn about SDK resolution:
https://aka.ms/dotnet/sdk-not-found


显示.NET信息:

$ dotnet --info
Host:
  Version:      7.0.14
  Architecture: x64
  Commit:       808851b07a

.NET SDKs installed:
  No SDKs were found.

.NET runtimes installed:
  Microsoft.AspNetCore.App 7.0.14 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 7.0.14 [/usr/lib/dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
  None

Environment variables:
  Not set

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download


没有列出SDK:

$ dotnet --list-sdks


我看到列出了一些运行时:

dotnet --list-runtimes
Microsoft.AspNetCore.App 7.0.14 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 7.0.14 [/usr/lib/dotnet/shared/Microsoft.NETCore.App]


构建解决方案/项目失败,并显示与之前相同的消息:

$ dotnet build
The command could not be loaded, possibly because:
  * You intended to execute a .NET application:
      The application 'build' does not exist.
  * You intended to execute a .NET SDK command:
      No .NET SDKs were found.

Download a .NET SDK:
https://aka.ms/dotnet/download

Learn about SDK resolution:
https://aka.ms/dotnet/sdk-not-found

  • 我错过了什么?
  • 关于如何以及在何处部署.NET SDK安装文件的任何特定细节可能会对这个问题有所帮助?
  • 任何其他可能有用的故障排除操作?

其他详细信息:

  • 操作系统:OS 22.04 LTS x86_64
h9a6wy2h

h9a6wy2h1#

在我的例子中,旧的“关机再开机”的方法很有效。我将详细解释我采取的步骤。

关闭部分:

卸载/删除使用Microsoft/Ubuntu软件包安装的.NET:

  • 第一个月
  • sudo apt-get remove aspnetcore-runtime-7.0 --purge

然后,完全清除Linux上通常安装.NET的位置:

  • /usr/share/dotnet
  • /usr/lib/dotnet(在/usr/bin/dotnet上有一个与此相关的符号链接)
  • ~/.dotnet(我以前尝试的旧文件夹)
    “开启”部分:

我用dotnet-install脚本安装了.NET 7.0和.NET 8.0,用于手动安装(这次没有Microsoft或Ubuntu软件包)。
我特意将安装位置设置为~/.dotnet,以免在重新安装时丢失:

./dotnet-install.sh --version 8.0.100 --install-dir ~/.dotnet

字符串
下面是安装完成后~/.dotnet文件夹的概要:

.
...
├── corefx
├── dotnet
├── host
├── LICENSE.txt
├── MachineId.v1.dotnetUserLevelCache
├── metadata
├── packs
├── sdk
├── sdk-advertising
├── sdk-manifests
├── shared
├── TelemetryStorageService
├── templates
└── ThirdPartyNotices.txt


我不需要设置$DOTNET_ROOT环境变量。如果没有设置$DOTNET_ROOTdotnet工具可能会首先搜索本地文件夹。
最后,像dotnet --versiondotnet --list-sdksdotnet --infodotnet buil这样的命令再次正常工作。

相关问题