Подтвердить что ты не робот

Библиотека hostpolicy.dll не найдена

У меня есть простой проект .NET Core (консольное приложение), который я пытаюсь скомпилировать и запустить. dotnet build преуспевает, но я получаю следующую ошибку, когда я делаю dotnet run:

λ dotnet run
Project RazorPrecompiler (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in [path].

Мой project.json выглядит так:

{
  "buildOptions": {
    "warningsAsErrors": true
  },
  "dependencies": {
    "Microsoft.AspNetCore.Razor": "1.0.0",
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0"
    }
  },
  "description": "Precompiles Razor views.",
  "frameworks": {
    "netcoreapp1.0": {
      "imports": [ ]
    }
  },
  "version": "1.2.0"
}

Что такое hostpolicy.dll, и почему он отсутствует?

4b9b3361

Ответ 1

Это сообщение об ошибке бесполезно. Проблемой актуальной является отсутствие свойства emitEntryPoint:

  "buildOptions": {
    ...
    "emitEntryPoint": true
  },

После добавления компилятор сообщит вам о любых других проблемах (например, о методе отсутствия static void Main()). Успешная компиляция проекта приведет к выводу, который может выполнить dotnet run.

Ответ 2

Обновление для dotnet core 2.0: файл appname.runtimeconfig.json (для конфигурации отладки и выпуска) необходим по тому же пути, что и appname. длл.

Он содержит:

{
  "runtimeOptions": {
    "tfm": "netcoreapp2.0",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "2.0.0"
    }
  }
}

тогда dotnet.exe exec "path/to/appname.dll" [appargs] работает.

Ответ 3

Для меня это была глупая ошибка: я запустил не тот файл.

Ответ 4

Для меня проблема была с несоответствием версии. У меня была установлена другая версия ".Net core SDK", и в файле .json была указана другая версия.

Как только я изменил версию в своем файле .json, приложение начало работать нормально.

Ответ 5

В моем случае это было потому, что я публиковал отдельное приложение для неправильной цели. Моим намерением было запустить на Alpine Linux, но я libc для libc когда я должен был musl для musl.

Отказавший пакет был собран с использованием:

dotnet publish --self-contained true --runtime linux-x64 --framework netcoreapp2.1 --output /app

Изменение RID:

dotnet publish --self-contained true --runtime linux-musl-x64 --framework netcoreapp2.1 --output /app

изготовлен функциональный пакет. Обратите внимание, что RID изменен с linux-x64 на linux-musl-x64. Если бы я прочитал страницу каталога .NET Core RID, этого можно было бы избежать. 😅

Ответ 6

Для меня с ASP.NET Core 2.0 на Azure это был appname.deps.json.

Ответ 7

У меня была такая же проблема с приложением .NET Core 3.0 WPF, но я обнаружил, что мое приложение не будет работать и в Visual Studio 2019.

На странице свойств проекта (щелкнув правой кнопкой мыши по проекту> Свойства) я обнаружил, что для целевой платформы был установлен .NET Core 3.0.

Недавно я обновил VS 2019, на котором также был установлен .NET Core 3.1, поэтому я переключился на это в раскрывающемся списке, и он снова заработал.

(Мне также пришлось обновить ярлык, чтобы он указывал на папку netcoreapp3.1 вместо предыдущей папки netcoreapp3.0.)

Ответ 8

Продвижение комментария вольтрево в качестве ответа, так как я считаю, что это должно быть наиболее распространенным случаем проблемы. Когда вы создаете свое решение, иногда вы можете получить 2 каталога с выводами bin и obj. В каталоге 'Bin' есть все, что нужно для запуска команды dotnet.exe. Просто запустите из каталога bin, и все должно быть хорошо. :)

Ответ 9

Решением может быть выполнение cmd в качестве администратора (по крайней мере, для меня это было).