Eventos
Cree aplicaciones inteligentes
17 mar, 11 p.m. - 21 mar, 11 p.m.
Únete a la serie de encuentros para crear soluciones de IA escalables basadas en casos de uso del mundo real con otros desarrolladores y expertos.
Regístrese ahoraEste explorador ya no es compatible.
Actualice a Microsoft Edge para aprovechar las características, las actualizaciones de seguridad y el soporte técnico más recientes.
Al intentar usar .NET en Linux, es posible que en comandos como dotnet new
y dotnet run
se produzca un error con un mensaje relacionado con un archivo que no se encuentra, tal como fxr, libhostfxr.so, o FrameworkList.xml. Algunos de los mensajes de error pueden ser similares a los elementos siguientes:
System.IO.FileNotFoundException
System.IO.FileNotFoundException: No se encontró el archivo "/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml".
Error grave
Error grave. No se pudo encontrar la biblioteca libhostfxr.so especificada.
or
Error grave. La carpeta [/usr/share/dotnet/host/fxr] no existe.
o
Error irrecuperable. La carpeta [/usr/share/dotnet/host/fxr] no contiene ninguna carpeta secundaria con número de versión.
Mensajes genéricos que indican que no se encuentra dotnet
Puede aparecer un mensaje general que indica que no se encuentra el SDK o que el paquete ya se ha instalado.
Un síntoma de estos problemas es que las carpetas /usr/lib64/dotnet
y /usr/share/dotnet
y están en el sistema.
Sugerencia
Use el comando dotnet --info
para enumerar los SDK y los runtimes que están instalados. Para obtener más información, vea Cómo comprobar que .NET Core ya está instalado.
Importante
A partir de .NET 9, Microsoft solo publica paquetes para distribuciones de Linux compatibles que no publican sus propios paquetes. Para obtener más información, vea Instalación de .NET en Linux.
Estos errores suelen producirse cuando dos repositorios de paquetes de Linux proporcionan paquetes .NET. Mientras que Microsoft proporciona un repositorio de paquetes de Linux para los paquetes de .NET de origen, algunas distribuciones de Linux también proporcionan paquetes de .NET. Estas distribuciones incluyen:
Si combina paquetes de .NET de dos orígenes diferentes, es probable que se produzcan problemas. Los paquetes pueden colocar cosas en diferentes rutas de acceso y se pueden compilar de forma diferente.
Para solucionar estos problemas, hay que usar .NET desde un repositorio de paquetes. El repositorio que se elegirá y cómo se hará varía en función del caso de uso y la distribución de Linux.
¿Usa el repositorio de Microsoft para otros paquetes, como PowerShell y MSSQL?
Sí
Configure el administrador de paquetes para omitir los paquetes .NET del repositorio de Microsoft. Es posible que haya instalado .NET desde ambos repositorios, de modo que quiere elegir uno o el otro.
Quite los paquetes .NET existentes de la distribución. Quiere empezar de nuevo y asegurarse de que no los instala desde el repositorio incorrecto.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
Configure el repositorio de Microsoft para omitir los paquetes .NET.
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/microsoft-prod.repo
Vuelva a instalar .NET desde la fuente de paquetes de la distribución. Para obtener más información, vea Instalación de .NET en Linux.
No
Quite los paquetes .NET existentes de la distribución. Quiere empezar de nuevo y asegurarse de que no los instala desde el repositorio incorrecto.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
Elimine la fuente del repositorio de Microsoft de la distribución.
sudo dnf remove packages-microsoft-prod
Vuelva a instalar .NET desde la fuente de paquetes de la distribución. Para obtener más información, vea Instalación de .NET en Linux.
¿Usa el repositorio de Microsoft para otros paquetes, como PowerShell y MSSQL?
Sí
Configure el administrador de paquetes para omitir los paquetes .NET del repositorio de Microsoft. Es posible que haya instalado .NET desde ambos repositorios, de modo que quiere elegir uno o el otro.
Quite los paquetes .NET existentes de la distribución. Quiere empezar de nuevo y asegurarse de que no los instala desde el repositorio incorrecto.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
Cree /etc/apt/preferences
si no aún no existe.
touch /etc/apt/preferences
Abra /etc/apt/preferences
en un editor y agregue la configuración siguiente. Esto impedirá que los paquetes que empiecen por dotnet
, aspnetcore
o netstandard
se originen desde el repositorio de Microsoft:
Package: dotnet* aspnet* netstandard*
Pin: origin "packages.microsoft.com"
Pin-Priority: -10
Vuelva a instalar .NET desde la fuente de paquetes de la distribución. Para obtener más información, vea Instalación de .NET en Linux.
No
Quite los paquetes .NET existentes de la distribución. Quiere empezar de nuevo y asegurarse de que no los instala desde el repositorio incorrecto.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
Elimine la fuente del repositorio de Microsoft de la distribución.
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
sudo apt update
Vuelva a instalar .NET desde la fuente de paquetes de la distribución. Para obtener más información, vea Instalación de .NET en Linux.
Configure el administrador de paquetes para omitir los paquetes .NET del repositorio de la distribución. Es posible que haya instalado .NET desde ambos repositorios, de modo que quiere elegir uno o el otro.
Quite los paquetes .NET existentes de la distribución. Quiere empezar de nuevo y asegurarse de que no los instala desde el repositorio incorrecto.
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
Configure el repositorio de Linux para omitir los paquetes .NET.
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/<your-package-source>.repo
Asegúrese de reemplazar <your-package-source>
por el origen del paquete de la distribución.
Vuelva a instalar .NET desde la fuente de paquetes de la distribución. Para obtener más información, vea Instalación de .NET en Linux.
Configure el administrador de paquetes para omitir los paquetes .NET del repositorio de la distribución. Es posible que haya instalado .NET desde ambos repositorios, de modo que quiere elegir uno o el otro.
Quite los paquetes .NET existentes de la distribución. Quiere empezar de nuevo y asegurarse de que no los instala desde el repositorio incorrecto.
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
Cree /etc/apt/preferences
si no aún no existe.
touch /etc/apt/preferences
Abra /etc/apt/preferences
en un editor y agregue un fragmento de preferencias apt para evitar que los paquetes que empiecen por dotnet
, aspnetcore
o netstandard
que se origine desde el repositorio de la distribución.
Package: dotnet* aspnet* netstandard*
Pin: origin "<your-package-source>"
Pin-Priority: -10
Asegúrese de reemplazar <your-package-source>
por el origen del paquete de la distribución.
La distribución puede tener más de un origen de paquete.
Por ejemplo, en Ubuntu en Estados Unidos, es posible que tenga que usar un fragmento para archive.ubuntu.com
y otro para security.ubuntu.com
. Separe cada fragmento con una línea en blanco 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: -10
Sugerencia
Use el comando apt-cache policy
para buscar el origen:
apt-cache policy '?name(dotnet.*)' | grep -v microsoft | grep '/ubuntu' | cut -d"/" -f3 | sort -u
Sugerencia
Si registró el repositorio de paquetes de backports de Ubuntu .NET debería anular el registro del repositorio de paquetes de backports de Ubuntu .NET en lugar de configurar el administrador de paquetes para omitir los paquetes de .NET incluidos. De lo contrario, el administrador de paquetes extraerá el índice de paquetes de este repositorio, solo para omitirlo, ya que el repositorio solo contiene paquetes de .NET. Esto ralentizará eficazmente la actualización del índice de paquetes locales cada vez que se llame a apt update
.
Use el comando apt-cache policy
para comprobar si registró el repositorio de paquetes de backports de Ubuntu .NET:
apt-cache policy '?name(dotnet.*)' | grep 'ppa.launchpadcontent.net/dotnet/backports' | sort -u
Vuelva a instalar .NET desde la fuente de paquetes de Microsoft. Para obtener más información, vea Instalación de .NET en Linux. Si usa Ubuntu, vea Mi distribución de Ubuntu no incluye la versión de .NET que quiero, o bien necesito una versión de .NET no compatible.
Muchos otros usuarios han notificado estos problemas. A continuación se muestra una lista de dichos problemas. Puede consultarlos para informarse sobre lo que podría estar sucediendo:
System.IO.FileNotFoundException y "/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml"
Error grave: No se encontró libhostfxr.so
Error grave: La carpeta /host/fxr no existe
Error grave: La carpeta /host/fxr no contiene carpetas secundarias con número de versión
Errores genéricos sin mensajes claros
Comentarios de .NET
.NET es un proyecto de código abierto. Selecciona un vínculo para proporcionar comentarios:
Eventos
Cree aplicaciones inteligentes
17 mar, 11 p.m. - 21 mar, 11 p.m.
Únete a la serie de encuentros para crear soluciones de IA escalables basadas en casos de uso del mundo real con otros desarrolladores y expertos.
Regístrese ahoraFormación
Módulo
Erstellen eines neuen .NET-Projekts und Arbeiten mit Paketabhängigkeiten - Training
Hier erstellen Sie ein .NET-Projekt und erfahren, wie Sie in Ihrem Projekt Pakete hinzufügen und Paketabhängigkeiten verwalten. Verwenden Sie die .NET Core-CLI und die NuGet-Registrierung, um Ihren C#-Anwendungen über Visual Studio Code Bibliotheken und Tools hinzuzufügen.