Отладчик VS Code C# .NET не работает в Linux: руководство по исправлению
Исправьте ошибку 'libhostfxr.so not found' отладчика VS Code C# .NET в Linux. Полное руководство по устранению неполадок с различиями между терминалом и средой отладчика. Решите проблемы доступа к среде выполнения .NET прямо сейчас.
C# .NET приложение не запускается в VS Code в Linux, несмотря на установленный .NET
Я использую VS Code в Linux (не Visual Studio) и пытаюсь запустить мой C# шаблон с помощью функции “Run and Debug”, но это завершается ошибкой:
-----------------------------------------------------------------------------
Вы можете использовать отладчик Microsoft Visual Studio .NET/C/C++ (vsdbg) только
с программным обеспечением Visual Studio Code, Visual Studio или Visual Studio for Mac
для разработки и тестирования ваших приложений.
-----------------------------------------------------------------------------
Для запуска этого приложения необходимо установить .NET.
Приложение: /home/lazare/Documents/lazare/webapi/WebApplication1/bin/Debug/net9.0/WebApplication1
Архитектура: x64
Версия хоста приложения: 9.0.10
Расположение .NET: не найдено
Подробнее:
https://aka.ms/dotnet/app-launch-failed
Скачать среду выполнения .NET:
https://aka.ms/dotnet-core-applaunch?missing_runtime=true&arch=x64&rid=ubuntu.24.04-x64&os=linuxmint.22.2&apphost_version=9.0.10
Не удалось разрешить libhostfxr.so [не найдено]. Код ошибки: 0x80008083
Целевой процесс завершился без вызова события запуска CoreCLR. Убедитесь, что целевой процесс настроен на использование .NET Core. Это может быть ожидаемым, если целевой процесс не выполнялся на .NET Core.
Программа '[73320] WebApplication1' завершилась с кодом 131 (0x83).
Однако у меня действительно установлен .NET 9, и приложение успешно запускается при выполнении из терминала:
lazare@lazare-dell:~/Documents/lazare/webapi$ dotnet run --project /home/lazare/Documents/lazare/webapi/WebApplication1
Используются параметры запуска из /home/lazare/Documents/lazare/webapi/WebApplication1/Properties/launchSettings.json...
Сборка...
info: Microsoft.Hosting.Lifetime[14]
Слушает по адресу: http://localhost:5025
info: Microsoft.Hosting.Lifetime[0]
Приложение запущено. Нажмите Ctrl+C для завершения работы.
info: Microsoft.Hosting.Lifetime[0]
Среда размещения: Development
info: Microsoft.Hosting.Lifetime[0]
Корневой путь к содержимому: /home/lazare/Documents/lazare/webapi/WebApplication1
Может кто-нибудь помочь мне понять, почему приложение запускается из терминала, но не через отладчик VS Code, и как решить эту проблему?
Ошибка “Не удалось найти libhostfxr.so [not found]” возникает, когда отладчик C# в VS Code не может найти необходимые компоненты среды выполнения .NET, даже когда .NET установлен и работает в вашем терминале. Это обычно происходит потому, что VS Code использует отдельный процесс отладки (vsdbg), которому нужен доступ к той же среде выполнения .NET, что и ваше приложение.
Содержание
- Понимание основной причины
- Распространенные причины и решения
- Пошаговое руководство по устранению неполадок
- Исправления конфигурации VS Code
- Альтернативные решения
- Советы по предотвращению
Понимание основной причины
Ошибка возникает потому, что отладчик C# в VS Code (vsdbg) работает как отдельный процесс, которому нужно найти и загрузить библиотеку libhostfxr.so, которая является частью среды выполнения .NET. Когда эта библиотека не найдена, отладчик не может инициализироваться и запустить ваше приложение. Это отличается от запуска приложения напрямую с помощью dotnet run, потому что:
- Терминал использует вашу текущую оболочку окружения и PATH
- Отладчик VS Code работает с другим контекстом окружения
- Отладчику нужны конкретные компоненты среды выполнения, которые могут отсутствовать в PATH отладчика
Как объясняется в документации Microsoft Learn, “Произошла фатальная ошибка. Требуемая библиотека libhostfxr.so не найдена” указывает на то, что компоненты среды выполнения .NET недоступны в контексте выполнения.
Распространенные причины и решения
1. Проблемы с PATH среды выполнения .NET
Проблема: Путь к среде выполнения .NET не включен в окружение, используемое отладчиком VS Code.
Решение: Убедитесь, что среда выполнения .NET находится в системном PATH:
# Проверьте, есть ли .NET в PATH
which dotnet
# Добавьте .NET в PATH при необходимости (добавьте в ~/.bashrc или ~/.zshrc)
export PATH="$PATH:/usr/local/share/dotnet"
2. Конфликты нескольких установок .NET
Проблема: Разные версии .NET SDK или среды выполнения установлены в разных местах, что вызывает путаницу.
Решение: Проверьте и очистите установки .NET:
# Перечислите все установки .NET
dotnet --list-sdks
dotnet --list-runtimes
# Удалите конфликтующие установки при необходимости
sudo rm -rf /usr/local/share/dotnet
3. Отсутствие требуемых компонентов среды выполнения
Проблема: Требуемая конкретная версия среды выполнения для вашего приложения не полностью установлена.
Решение: Установите полную среду выполнения:
# Установите конкретную версию среды выполнения
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install dotnet-runtime-9.0
Пошаговое руководство по устранению неполадок
Шаг 1: Проверка установки .NET
# Проверьте версию и установку .NET
dotnet --version
dotnet --info
# Проверьте наличие libhostfxr.so
find /usr -name "libhostfxr.so" 2>/dev/null
find $HOME -name "libhostfxr.so" 2>/dev/null
Шаг 2: Проверка переменных окружения
# Проверьте текущие переменные окружения
echo $PATH
echo $DOTNET_ROOT
# Установите DOTNET_ROOT, если не задана
export DOTNET_ROOT=/usr/local/share/dotnet
Шаг 3: Тестирование команд .NET Core
# Проверьте базовую функциональность .NET
dotnet --help
dotnet new console
dotnet run
Шаг 4: Переустановка среды выполнения .NET
Если проверка показывает проблемы, переустановите среду выполнения:
# Удалите существующую установку .NET
sudo rm -rf /usr/local/share/dotnet
sudo rm -rf /usr/lib/dotnet
# Установите свежую среду выполнения .NET
wget https://dot.net/v1/dotnet-install.sh
chmod +x dotnet-install.sh
./dotnet-install.sh --channel 9.0 --runtime aspnetcore
Исправления конфигурации VS Code
1. Обновление расширения C#
Убедитесь, что у вас установлено последнее расширение C#:
# В VS Code перейдите в Extensions и обновите "C# Dev Kit" и "C#"
2. Конфигурация launch.json
Проверьте вашу конфигурацию .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/net9.0/WebApplication1",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
},
"env": {
"DOTNET_ROOT": "/usr/local/share/dotnet"
},
"console": "integratedTerminal"
}
]
}
3. Установка переменных окружения в VS Code
Добавьте переменные окружения в настройки VS Code:
{
"terminal.integrated.env.linux": {
"DOTNET_ROOT": "/usr/local/share/dotnet",
"PATH": "${env:PATH}:/usr/local/share/dotnet"
}
}
Альтернативные решения
1. Использование автономного развертывания
Если проблемы со средой выполнения сохраняются, рассмотрите возможность публикации как автономного приложения:
dotnet publish -c Release -r linux-x64 --self-contained true
2. Установка .NET на уровне системы
Установите .NET с помощью системного менеджера пакетов:
# Для Ubuntu/Debian
sudo apt-get update
sudo apt-get install dotnet-sdk-9.0
# Для других дистрибутивов проверьте их репозитории пакетов
3. Использование Docker для разработки
Создайте Docker-контейнер с предварительно установленным .NET:
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o /app/publish
Советы по предотвращению
1. Регулярное обслуживание
- Регулярно обновляйте среду выполнения .NET
- Регулярно обновляйте VS Code и расширения C#
- Удаляйте неиспользуемые версии .NET
2. Согласованность окружения
- Используйте одну и ту же оболочку для разработки и отладки
- Настройте правильные переменные окружения в профиле вашей оболочки
- Рассмотрите возможность использования контейнеров разработки для согласованных окружений
3. Мониторинг
- Регулярно проверяйте статус установки .NET
- Следите за наличием файла libhostfxr.so
- Держите конфигурации PATH в актуальном состоянии
Заключение
Ошибка “libhostfxr.so не найдена” обычно возникает из-за проблем с конфигурацией окружения между вашим терминалом и контекстом отладки VS Code. Следуя этим шагам устранения неполадок, вы должны сможете решить проблему:
- Проверьте установку .NET на полноту и доступность
- Проверьте переменные окружения и конфигурацию PATH
- Обновите расширения VS Code и правильно настройте параметры запуска
- Рассмотрите альтернативные методы развертывания, если проблемы сохраняются
Помните, что терминал и отладчики VS Code могут работать в разных окружениях, поэтому обеспечение доступа обоих к одним и тем же компонентам среды выполнения .NET является ключом к решению этой проблемы. Если вы продолжаете испытывать проблемы, рассмотрите возможность использования Docker-контейнеров или установок .NET на уровне системы для более надежного опыта разработки.
Источники
- Stack Overflow - C# .net cannot run in VS code
- Microsoft Learn - Troubleshoot .NET package mix ups on Linux
- Stack Overflow - The required library libhostfxr.so could not be found
- TheCodeBuzz - Resolved: The required library hostfxr.dll could not be found
- Stack Overflow - How to debug asp.net core 3.1 using vscode in linux(ubuntu)