找不到库hostpolicy.dll

时间:2016-06-28 20:12:24

标签: .net .net-core dotnet-cli

我有一个简单的.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,为什么会丢失?

15 个答案:

答案 0 :(得分:21)

更新 dotnet core 2.0 :文件 appname.runtimeconfig.json (对于调试和发布配置)需要与 appname相同的路径。 DLL

它包含:

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

然后dotnet.exe exec "path/to/appname.dll" [appargs]有效。

答案 1 :(得分:18)

此错误消息无效。 实际问题是缺少emitEntryPoint属性:

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

添加完成后,编译器会告诉您任何其他问题(例如缺少static void Main()方法)。成功编译项目将导致dotnet run可以执行的输出。

答案 2 :(得分:3)

我不确定为什么,但是在执行\ bin文件夹中的.exe文件时却遇到了问题,而\ obj文件夹中的.exe工作正常。

答案 3 :(得分:3)

如果我没记错的话,遇到问题的一种情况是:您有一个引用另一个应用程序项目(不是库)的集成项目。在这种情况下,dependentProject.runtimeconfig.json将不会被复制到集成项目的输出文件夹中,并且您将无法运行dependentProject.exe二进制文件,因为它将抛出The library hostpolicy.dll was not found.

为此有一个Github issue和一个workaround

答案 4 :(得分:1)

这是在Visual Studio 2019预览版将.Net Core升级到最新预览版(特别是.Net Core 3.1.100-preview2-014569)时发生的。

重新安装/修复.Net Core 3.0.100为我解决了该问题。

答案 5 :(得分:1)

也许您不想执行“ Console .Net Core”项目,而不想执行“ Console .Net Framework”项目。它为我解决了问题...

答案 6 :(得分:1)

我在Dotnet Core 3.1 Console应用程序中遇到此问题。

如果要发布应用程序,请确保将目标运行时设置为目标计算机中已安装的特定运行时。

如果您设置为便携式,它将选择任何您认为合适的运行时(您可能没有安装)

答案 7 :(得分:1)

我的问题是我有 2 个 .NET Core App 项目,其中一个依赖另一个(这样我就可以从其他应用程序执行该应用程序) 但是 .NET Core 应用程序(使用默认配置) 需要<程序集名称>.runtimeconfig.json 文件 (获取一些启动配置) '默认不复制。


唯一对我有用的解决方案是添加到项目属性>构建事件(依赖项目的)这个命令:

COPY "$(SolutionDir)<dependency name>\$(OutDir)<dependency assymbly name>.runtimeconfig.json" "$(SolutionDir)$(ProjectName)\$(OutDir)" /Y

但是你也可以手动将.runtimeconfig.json文件复制到依赖项目中。


请注意,应该有一种更好、更通用的方法来自动为每个 .NET Core 应用项目执行此操作。

答案 8 :(得分:0)

对于我在Azure上使用ASP.NET Core 2.0,appname.deps.json就是这样做的。

答案 9 :(得分:0)

对我来说,问题在于版本不匹配。我安装了一个不同的“ .Net core SDK”版本,并且在.json文件中指定了一个不同的版本。

一旦我在.json文件中修改了版本,应用程序就会开始正常运行。

答案 10 :(得分:0)

在我的情况下,这是因为我正在为错误的目标发布自包含的应用程序。我的意图是在高山linux上运行,但是当我本应为libc进行构建时,我正在为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 Catalog page,这是可以避免的。

答案 11 :(得分:0)

对我来说,这是一个愚蠢的错误:我启动了错误的文件。

答案 12 :(得分:0)

.NET Core 3.0 WPF应用程序也有同样的问题,但我发现我的应用程序也无法在Visual Studio 2019中运行。

我在项目属性页(右键单击项目>属性)上发现Target框架设置为.NET Core 3.0。

我最近更新了VS 2019,该版本还安装了.NET Core 3.1,因此我在下拉列表中切换到该版本,然后它又重新工作了。

(我还必须更新我的快捷方式,使其指向netcoreapp3.1文件夹而不是以前的netcoreapp3.0文件夹。)

答案 13 :(得分:0)

推广voltrevo的评论作为答案,因为我认为这应该是该问题最常见的情况。构建解决方案时,有时可能会获得2个带有输出bin和obj的目录。 “ Bin”目录包含运行dotnet.exe命令所需的所有内容。只需从bin目录运行,一切应该很好。 :)

答案 14 :(得分:-2)

解决方案可能是以管理员身份执行cmd(至少对我来说是这样)。