Ошибка HTTP 500.31 — не удалось загрузить среду выполнения ASP.NET Core

У меня возникают проблемы с развертыванием приложений .NET Core в IIS на компьютере с Windows 10.

Когда я развертываю IIS и перехожу на сайт, я получаю сообщение:

"HTTP Error 500.31 - Failed to load ASP.NET Core runtime
Common solutions to this issue:
The specified version of Microsoft.NetCore.App or Microsoft.AspNetCore.App was not found.
Troubleshooting steps:
Check the system event log for error messages
Enable logging the application process' stdout messages
Attach a debugger to the application process and inspect
For more information visit: https://go.microsoft.com/fwlink/?LinkID=2028526

В моем средстве просмотра событий каждый вызов страницы генерирует 3 сообщения об ошибках.

  1. Не удалось найти зависимости приложения. Убедитесь, что установлены версии Microsoft.NetCore.App и Microsoft.AspNetCore.App, на которые нацелено приложение.

  2. Не удалось найти «aspnetcorev2_inprocess.dll». Сообщение об исключении:

  3. Не удалось запустить приложение «/LM/W3SVC/4/ROOT», код ошибки «0x8000ffff».

Только на этом я бы пошел в кроличью нору, думая, что есть какая-то проблема в сборке проекта или, возможно, в моей установке какого-то пакета .NET Core, за исключением:

  1. У меня есть два других сайта .NET Core 3.1, работающих на разных портах. На самом деле, если я скопирую файлы из директории рабочего сайта, в директорию нерабочего сайта они не запустятся через IIS. Если я скопирую файлы из каталога нерабочего сайта на рабочий сайт, эти файлы будут запускаться через IIS.
  2. Если я нажму на исполняемый файл для любого из сайтов и перейду к указанному локальному хосту, они прекрасно откроются в веб-браузере.
  3. Я могу запускать всевозможные зависимые от фреймворка и автономные консольные приложения .Net Core 3.1 и .Net Core 5.0 в любом месте одной и той же системы.
  4. Два сайта, которые работают, показали одно и то же сообщение об ошибке, когда я в первый раз пошел на публикацию. Я пытался настроить параметры, переустановить среды выполнения и т.п., но не смог выделить ничего, что заставляло их запускаться через несколько часов после первой попытки развертывания.
  5. Нет никакой видимой разницы в настройках в Application Pool или самих сайтах между работающими и неработающими сайтами.

Я думаю, что должна быть какая-то проблема с тем, как я настроил IIS, сайты или пулы приложений, но, насколько я могу судить, нет никакой разницы. Если кто-то сталкивался с этим, жду предложений.

🤔 А знаете ли вы, что...
C# также используется для разработки игр с помощью Unity3D, популярного игрового движка.


46
161 028
20

Ответы:

Решено

Используя инструмент, предложенный (и созданный) @LexLi, я смог определить, что проблема была вызвана тем, что пул приложений не имеет разрешений на папку сайта. Предоставление ему разрешений решило проблему. Это не было ясно из сообщений об ошибках. Ответил здесь на случай, если кто-то еще столкнется с таким же сообщением об ошибке.


В моем случае на целевой машине отсутствовала сама среда выполнения ASP.NET Core.

Проблема решена после установки Hosting Bundle из .Net Core 3.1


Я получал те же сообщения об ошибках для нового веб-приложения, зависящего от платформы .NET Core 3.1, на сервере IIS, на котором уже без проблем размещались другие зависящие от платформы веб-приложения .NET Core 3.1. Сообщения в средстве просмотра событий немного отличались; но также очень трудно найти - иногда я не мог видеть какие-либо события, которые, казалось бы, связаны.

Если бы я преобразовал сайт в автономный "win-x86", это сработало; но автономный "win-x64" не работал.

После дней...

  • Читая информацию о связанном URL-адресе Microsoft в сообщении об ошибке,
  • запуск сайта из командной строки (без проблем),
  • проверка dotnet --info на сервере IIS,
  • проверка dotnet --info на сервере сборки,
  • глядя на файлы конфигурации JSON, файлы проекта, настройки сборки, настройки публикации и настройки IIS

... это оказалось настройкой AppPool.

В дополнительных настройках AppPool есть параметр «Включить 32-разрядные приложения», который IIS считает значением по умолчанию False; но на моем было True. Переключение этого параметра приводило к тому, что сайт работал и не работал, когда False и True соответственно.

На моем сайте для него было установлено значение True, потому что мы используем octopusdeploy для развертывания нашего сайта, а шаг «IIS AppPool — Create» имеет параметр, относящийся к этому параметру; но в Octopus значение по умолчанию — True, поэтому его необходимо отключить.


Я устранил эту ошибку, изменив режим развертывания с «Зависимый от платформы» на «Автономный» в процессе публикации. Не уверен, как это изменение исправило это, но у меня это работает. Я использую .NET 5.


У меня такая же проблема...

мое решение довольно простое и в то же время смущающее :) Я думал, что пакеты основных хостов asp.net совместимы с предыдущими версиями.

Решение: мое приложение было настроено на 3.1. в качестве целевой платформы, но я установил пакет хостинга 5.0.9 на iis.

После того, как я установил правильную версию пакета хостинга, версия 3.1. версия, заработало!


Мне пришлось установить и .NET 5, и .NET Core 3.1. Некоторые люди здесь предлагали загрузить 3.1 (мое приложение нацелено на 3.1), но когда я захожу на сайт Microsoft, он «рекомендует» последнюю версию, которая на момент написания этого поста — 5.0 (https://dotnet.microsoft.com). /download/dotnet/5.0).

Что ж, только версия 5.0 вызывает проблему (ошибка HTTP 500.31 — не удалось загрузить среду выполнения ASP.NET Core).

Наконец-то я смог исправить это ПОСЛЕ того, как установил 3.1 https://dotnet.microsoft.com/download/dotnet-core/3.1.


У меня была эта проблема на производстве после нескольких дней развертывания. Внезапно перестал работать с ошибкой (HTTP Error 500.31 - Failed to load runtime ASP.NET Core). В моем случае я просто восстановил установленную версию, и она заработала.


У меня была такая же проблема на производстве после развертывания. Пожалуйста, убедитесь, что все dll развернуты на рабочем сервере. В моем случае одна из dll отсутствовала. Я просто загружаю эту dll, и она работает.


Иногда это помогает перезапустить пул приложений.


Как и в ответе Alex Monkey, мне не хватало пакета хостинга.

Чтобы быть более конкретным, моя проблема заключалась в том, что я случайно установил только среду выполнения вместо пакета хостинга. Я предполагал, что ссылка «x64» на картинке ниже будет загружать 64-разрядную версию пакета, но это не так.

Вам нужно нажать на слова «Hosting Bundle», чтобы получить правильный установщик:

Получите пакет хостинга для любой версии .NET здесь.