Библиотека 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
, и почему он отсутствует?
Ответы
Ответ 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 в качестве администратора (по крайней мере, для меня это было).