Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao tentar usar o .NET no Linux, comandos como dotnet new e dotnet run podem falhar com uma mensagem relacionada a um arquivo não encontrado, como fxr, libhostfxr.so ou FrameworkList.xml. Algumas das mensagens de erro podem ser semelhantes aos seguintes itens:
System.IO.FileNotFoundException
System.IO.FileNotFoundException: não foi possível localizar o arquivo '/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml'.
Ocorreu um erro fatal.
Ocorreu um erro fatal. Não foi possível encontrar a biblioteca necessária libhostfxr.so.
ou
Ocorreu um erro fatal. A pasta [/usr/share/dotnethost/fxr] não existe.
ou
Ocorreu um erro fatal, a pasta [//usrshare/dotnethost/fxr] não contém pastas filho com o número da versão.
Mensagens genéricas sobre dotnet não encontradas
Uma mensagem geral pode ser exibida indicando que o SDK não foi encontrado ou que o pacote já foi instalado.
Um sintoma desses problemas é que as pastas /usr/lib64/dotnet e /usr/share/dotnet estão no sistema.
Dica
Use o comando dotnet --info para listar quais SDKs e runtimes estão instalados. Para obter mais informações, confira Como verificar se o .NET já está instalado.
O que está acontecendo
Importante
A partir do .NET 9, a Microsoft publica apenas pacotes para distribuições Linux com suporte que não publicam seus próprios pacotes. Para saber mais, confira Instalar o .NET no Linux.
Esses erros geralmente ocorrem quando dois repositórios de pacotes do Linux fornecem pacotes do .NET. Embora a Microsoft forneça um repositório de pacotes Linux para pacotes .NET de origem, algumas distribuições do Linux também fornecem pacotes .NET. Essas distribuições incluem:
- Linux alpino
- Arco
- Fluxo do CentOS
- Fedora
- RHEL (Red Hat Enterprise Linux)
- Ubuntu 22.04+
Se você misturar pacotes .NET de duas fontes diferentes, provavelmente terá problemas. Os pacotes podem colocar as coisas em caminhos diferentes e podem ser compilados de modo diferente.
Soluções
A solução para esses problemas é usar o .NET em um repositório de pacotes. Qual repositório escolher e como fazer isso varia de acordo com o caso de uso e a distribuição do Linux.
- Minha distribuição do Linux fornece pacotes do .NET e desejo usá-los.
- Preciso de uma versão do .NET que não é fornecida pela minha distribuição do Linux.
Minha distribuição do Linux fornece pacotes do .NET e desejo usá-los
Você usa o repositório da Microsoft para outros pacotes, como o PowerShell e o MSSQL?
Sim
Configure o gerenciador de pacotes para ignorar os pacotes do .NET no repositório da Microsoft. É possível que você tenha instalado o .NET por meio dos dois repositórios, portanto, escolha um ou outro.
Remova os pacotes existentes do .NET de sua distribuição. Recomece e não os instale por meio do repositório errado.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'Configure o repositório da Microsoft para ignorar os pacotes do .NET.
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/microsoft-prod.repoReinstale o .NET por meio do feed de pacotes da distribuição. Para saber mais, confira Instalar o .NET no Linux.
Não
Remova os pacotes existentes do .NET de sua distribuição. Recomece e não os instale por meio do repositório errado.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'Exclua o feed do repositório da Microsoft de sua distribuição.
sudo dnf remove packages-microsoft-prodReinstale o .NET por meio do feed de pacotes da distribuição. Para saber mais, confira Instalar o .NET no Linux.
Você usa o repositório da Microsoft para outros pacotes, como o PowerShell e o MSSQL?
Sim
Configure o gerenciador de pacotes para ignorar os pacotes do .NET no repositório da Microsoft. É possível que você tenha instalado o .NET por meio dos dois repositórios, portanto, escolha um ou outro.
Remova os pacotes existentes do .NET de sua distribuição. Recomece e não os instale por meio do repositório errado.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'Crie o
/etc/apt/preferences, se ele ainda não existir.touch /etc/apt/preferencesAbra
/etc/apt/preferencesem um editor e adicione as seguintes configurações, que impedem que os pacotes que começam comdotnet,aspnetcoreounetstandardsejam obtidos no repositório da Microsoft:Package: dotnet* aspnet* netstandard* Pin: origin "packages.microsoft.com" Pin-Priority: -10Reinstale o .NET por meio do feed de pacotes da distribuição. Para saber mais, confira Instalar o .NET no Linux.
Não
Remova os pacotes existentes do .NET de sua distribuição. Recomece e não os instale por meio do repositório errado.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'Exclua o feed do repositório da Microsoft de sua distribuição.
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt updateReinstale o .NET por meio do feed de pacotes da distribuição. Para saber mais, confira Instalar o .NET no Linux.
Preciso de uma versão do .NET que não é fornecida pela minha distribuição Linux
Configure o gerenciador de pacotes para ignorar os pacotes do .NET no repositório da distribuição. É possível que você tenha instalado o .NET por meio dos dois repositórios, portanto, escolha um ou outro.
Remova os pacotes existentes do .NET de sua distribuição. Recomece e não os instale por meio do repositório errado.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'Configure o repositório do Linux para ignorar os pacotes do .NET.
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/<your-package-source>.repoSubstitua
<your-package-source>pela fonte do pacote da sua distribuição.Reinstale o .NET por meio do feed de pacotes da distribuição. Para saber mais, confira Instalar o .NET no Linux.
Configure o gerenciador de pacotes para ignorar os pacotes do .NET no repositório da distribuição. É possível que você tenha instalado o .NET por meio dos dois repositórios, portanto, escolha um ou outro.
Remova os pacotes existentes do .NET de sua distribuição. Recomece e não os instale por meio do repositório errado.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'Crie o
/etc/apt/preferences, se ele ainda não existir.touch /etc/apt/preferencesAbra
/etc/apt/preferencesem um editor e adicione um fragmento de preferências do apt para evitar que pacotes que começam comdotnet,aspnetcoreounetstandardsejam originados do repositório da distribuição.Package: dotnet* aspnet* netstandard* Pin: origin "<your-package-source>" Pin-Priority: -10Substitua
<your-package-source>pela fonte do pacote da sua distribuição.Sua distribuição pode ter mais de uma fonte de pacote.
Por exemplo, no Ubuntu nos EUA, talvez seja necessário usar um fragmento para
archive.ubuntu.come outro parasecurity.ubuntu.com. Separe cada fragmento com uma linha em branco como esta:Package: dotnet* aspnet* netstandard* Pin: origin "archive.ubuntu.com" Pin-Priority: -10 Package: dotnet* aspnet* netstandard* Pin: origin "security.ubuntu.com" Pin-Priority: -10Dica
Use o comando
apt-cache policypara localizar a origem:apt-cache policy '?name(dotnet.*)' | grep -v microsoft | grep '/ubuntu' | cut -d"/" -f3 | sort -uDica
Se você registrou o repositório de pacotes backports do Ubuntu .NET você deve cancelar o registro do repositório de pacotes backports do Ubuntu .NET em vez de configurar seu gerenciador de pacotes para ignorar os pacotes .NET contidos. Caso contrário, seu gerenciador de pacotes extrai o índice do pacote deste repositório, apenas para ignorá-lo, porque o repositório contém apenas pacotes .NET. Isso efetivamente retarda a atualização do seu índice de pacotes local toda vez que você liga
apt update.Use o comando
apt-cache policypara verificar se você registrou o repositório de pacotes backports do Ubuntu .NET:apt-cache policy '?name(dotnet.*)' | grep 'ppa.launchpadcontent.net/dotnet/backports' | sort -uReinstale o .NET por meio do feed de pacotes da Microsoft. Para saber mais, confira Instalar o .NET no Linux. Ao usar o Ubuntu, confira Minha distribuição do Ubuntu não inclui a versão desejada do .NET ou preciso de uma versão dele que não tem mais suporte.
Referências online
Muitos outros usuários relataram esses problemas. A lista a seguir é desses problemas. Você pode ler esses problemas para obter insights sobre o que pode estar acontecendo:
System.IO.FileNotFoundException e '/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml'
- SDK nº 15785: não é possível criar um novo projeto depois de atualizar para 5.0.3
- SDK nº 15863: "a tarefa ResolveTargetingPackAssets do MSB4018 falhou inesperadamente" depois de atualizar para 5.0.103
- SDK nº 17411: a compilação dotnet sempre gera erro
- SDK nº 12075: dotnet 3.1.301 no Fedora 32, não é possível localizar FrameworkList.xml porque ele não existe
Erro fatal: não foi possível encontrar libhostfxr.so
Erro fatal: a pasta /host/fxr não existe
Erro fatal: a pasta /host/fxr não contém as pastas filho com o número da versão
Erros genéricos sem mensagens claras
- Core nº 4605: não é possível executar o "novo console do dotnet"
- Core nº 4644: não é possível instalar o SDK 2.1 do .NET Core no Fedora 32
- Runtime nº 49375: depois de atualizar para 5.0.200-1 usando o gerenciador de pacotes, parece que nenhum SDK foi instalado
- Instalador nº 16438: o aplicativo "--version" não existe