找不到库 hostpolicy.dll

The library hostpolicy.dll was not found

我有一个正在尝试编译的简单 .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,为什么不见了?

此错误消息没有帮助。 实际问题是缺失emitEntryPoint属性:

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

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

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] 有效。

对于 Azure 上 ASP.NET Core 2.0 的我来说,是 appname.deps.json 成功了。您需要将其从构建目录复制到 Azure。

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

一旦我修改了我的 .json 文件中的版本,应用程序就开始正常工作了。

就我而言,这是因为我为错误的目标发布了 self-contained 应用程序。我的意图是 运行 在高山 linux 上,但是当我应该为 musl.

建造时,我却在为 libc 建造

失败的包是使用以下方法构建的:

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 这本可以避免。

我在 .NET Core 3.0 WPF 应用程序中遇到了同样的问题,但我发现我的应用程序在 Visual Studio 2019 年也不会 运行。

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

我最近更新了 VS 2019,它也安装了 .NET Core 3.1,所以我在下拉列表中切换到它,它再次运行。

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

提升 voltrevo 的评论作为答案,因为我认为这应该是问题的最常见情况。当你构建你的解决方案时,有时你可能会得到 2 个输出 bin 和 obj 的目录。 'Bin' 目录包含 运行 dotnet.exe 命令所需的一切。只需 运行 来自 bin 目录,一切都应该很好。 :)

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

Reinstalling/repairing .Net Core 3.0.100 为我解决了这个问题。

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

也许您不想做 "Console .Net Core" 项目,而是 "Console .Net Framework" 项目。它解决了这个问题,对我来说...

我在 Dotnet Core 3.1 控制台应用程序中遇到了这个问题。

如果您要发布您的应用程序,请确保您的目标运行时设置为您在目标机器上安装的特定运行时。

如果您设置为可移植,它会选择任何您觉得合适的运行时(您可能没有安装它)

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

有个Githubissue for this and a workaround.

编辑:在 .NET SDK 5.0.200 中应该是 fixed

我的问题是我有 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 应用程序项目执行此操作。

这个错误很普遍。所以真正的问题可以是任何事情。

就我而言(如果能帮助遇到相同问题的任何人),我创建了一个 Class 库项目而不是控制台应用程序项目。

A Class 库 DLL 无法使用 MSBuild 运行,即使它具有 Main 方法。 只有控制台应用程序 DDL 可以作为 dotnet <appname>.dll

运行

在 Azure Devops 中使用 VSTest@2 任务进行 运行 单元测试时,我遇到了类似的错误。 就我而言,问题出在我的 testAssemblyVer2 值上。我为测试 dll 提供了错误的模式。

下面的一个对我有用。(如果你在使用 VSTest 时遇到这个错误)

- task: VSTest@2
  displayName: 'Running UnitTests'
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
      $(System.DefaultWorkingDirectory)\SrcFolder\BBBB.UnitTests\**\bin\**\*.BBBB.UnitTests.dll
      $(System.DefaultWorkingDirectory)\SrcFolder\AAAAa.UnitTests\**\bin\**\*.AAAA.UnitTests.dll
      !**\*TestAdapter.dll
      !**\obj\**
    platform: x64
    configuration: Debug
    codeCoverageEnabled: true

因此请尝试为 testAssemblyVer2 输入提供正确的模式值。确保它只过滤所需的 dll。

我在 VS19 中有类似的问题 运行 测试。

========== Starting test run ==========

Testhost process exited with error: A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\Program Files\dotnet'. Failed to run as a self-contained app.

深入研究后,我找到了问题的根源:

测试二进制文件夹中 .runtimeconfig.json 的完整路径超过 255 个字符。重命名模块,使文件路径变短,问题解决。