A fatal error occurred. The folder [/usr/share/dotnet/host/fxr] does not exist

回答 5 浏览 2.2万 2022-09-17

Ubuntu 22.04 dotnet --info 更新后无法访问dotnet,重新安装dotnet和vscode也无济于事。

enter image description here

Vladislav Volynets 提问于2022-09-17
你是用apt安装dotnet的吗? 你的路径中可能有多个dotnet的实例吗?PMF 2022-09-17
我在Ubuntu 22.04上使用dotnet 6时多次遇到这种情况。当我在做我的项目时,Dotnet消失了。profimedica 2022-10-11
5 个回答
#1楼 已采纳
得票数 126

当.NET(核心)首次在Linux上发布时,它还没有在Ubuntu的官方版本中出现。因此,我们中的许多人加入了微软的APT repo,以便安装它。

现在,这些软件包是Ubuntu repo的一部分,它们与微软的软件包发生了冲突。这个错误是混合软件包的结果。

因此,你需要选择你要使用的那一个,并确保它们不会混合。就个人而言,我决定坚持使用微软的软件包,因为我认为它们会更好地保持最新。

首先,删除所有现有的软件包,以达到一个干净的状态。

sudo apt remove dotnet*
sudo apt remove aspnetcore*
sudo apt remove netstandard*

然后,在/etc/apt/preferences.d创建一个文件(我把我的文件命名为99microsoft-dotnet.pref,按照惯例,这种*.d目录中的文件通常以2位数为前缀,以便它们以可预测的顺序排序和加载),其内容如下。

Package: *
Pin: origin "packages.microsoft.com"
Pin-Priority: 1001

然后,常规的更新&安装。

sudo apt update
sudo apt install dotnet-sdk-6.0

如果你想使用Ubuntu的官方软件包,请按上述方法删除所有现有的软件包,但不要创建/etc/apt/preferences.d条目,只需删除微软的 repo即可。

sudo rm /etc/apt/sources.list.d/microsoft-prod.list
sudo apt update
sudo apt install dotnet-sdk-6.0

然而,请注意,微软的repo包含其他软件包,如PowerShell、SQL Server Command-Line Tools等,所以删除它可能不可取。

我相信有可能使APT配置更具体到这些软件包,但目前这对我来说是可行的。希望微软和Ubuntu一起工作,尽快解决这个问题。

关于这个问题和各种解决方案的更多信息可在此获得。

Tobias J 提问于2022-09-29
Tobias J 修改于2023-01-10
这为我解决了Ubuntu 22.04.1上的问题。我还决定使用微软的软件包。Robert Hardy 2022-10-04
谢谢你的帮助。MS网页上链接的一些指南错误地指定了所需的文件位置。这确实有效。Mikhail Orlov 2022-10-12
@LeOn-HanLi 我只是从链接的github问题中复制了它;它规定所有来自microsoft repo的软件包的优先级要高于所有来自Ubuntu repo的软件包。这应该没问题,因为唯一的冲突是dotnet的。你也可以指定只有我提到的那些软件包(dotnetaspnetcorenetstandard)应该有更高的优先级。更多关于如何配置apt优先级的信息在这里。wiki.debian.org/AptConfigurationTobias J 2022-10-27
根据这个askubuntu答案,似乎/etc/apt/preferences.d的文件的典型扩展名是*.pref。因此,我将99microsoft-dotnet改名为99microsoft-dotnet.prefKevin 2022-11-18
@Kevin 谢谢,我的目录是空的,所以不知道该用什么。我按照建议更新了答案,还包括了关于为什么使用"99"前缀的信息。Tobias J 2022-11-18
#2楼
得票数 11

试试这个解决方案https://github.com/dotnet/sdk/issues/27082#issuecomment-1211143446,对我来说,它解决了这个问题。

Роман Тимохов 提问于2022-09-17
正确,但也是一个仅有链接的答案,不符合SO的质量标准。sehe 2023-01-19
#3楼
得票数 11

我也遇到了同样的错误,我确实用微软的软件包安装了.Net。我认为问题出在你使用的是旧的.Net,或者是Ubuntu包和.Net包的混合情况(通过Jammy或PMC的f.x)。BTW,我解决了我的问题,坚持使用Ubuntu包,并运行了这个bash脚本。

# First, try to remove/uninstall older .Net, if any, then install .Net 6
echo "$(tput setaf 3)Installing .Net 6$(tput sgr0)"
sudo apt remove 'dotnet*'
sudo apt remove 'aspnetcore*'
sudo apt remove 'netstandard*'
sudo rm /etc/apt/sources.list.d/microsoft-prod.list
sudo rm /etc/apt/sources.list.d/microsoft-prod.list.save
sudo apt update
sudo apt install dotnet6
sa.as 提问于2022-10-26
#4楼
得票数 0

当我使用Ubuntu Jammy创建一个新的VS Code开发容器并选择"dotnet CLI"功能时,我遇到了这个错误。最后我把我的开发容器换成了Focal,这个问题就消失了。

Alex Dresko 提问于2022-11-14
#5楼
得票数 0

我收到此错误消息后:

sudo apt install dotnet-host

这为我解决了:

sudo apt install dotnet-sdk-6.0
rundekugel 提问于2023-01-25
标签