未找到图书馆hostpolicy.dll



我有一个简单的.NET Core Project(Console App),我正在尝试编译和运行。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,为什么缺少?

dotnet core 2.0及以后的更新strong> 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]工作。

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

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

添加了此内容后,编译器将使您知道任何其他问题(例如缺少的static void Main()方法)。成功编译项目将导致dotnet run可以执行的输出。

i在.NET 6.0中发生这种情况,其中未生成appname.runtimeconfig.dev.json文件。在bin/Debug/net6.0/目录中。

修复程序正在修改.csproj文件,并在 <PropertyGroup>元素中包含此片段:

<GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>

我在使用https://www.google.com/search?q=net60 runtimeconfig.dev.dev.json进行搜索时找到了此解决方案。Microsoft在microsoft.net.sdk- .net |的msbuild属性上使用该解决方案学习。微软学习:

Generateruntimeconfigdevfile

从.NET 6 SDK开始, [appName] .runtimesettings.dev.json 文件不再在编译时生成。如果您仍然希望生成此文件,请将GenerateRuntimeConfigDevFile属性设置为true

<PropertyGroup>
  <GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>
</PropertyGroup>

将其应用于.csproj文件并重新构建项目后,从Visual Studio代码进行调试效果很好,包括停止我以前设置的断点。

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

这个问题和解决方法。

编辑:应在.NET SDK 5.0.200中固定。

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

============开始测试===========

testhost过程出错:遇到致命错误。这执行应用程序所需的库" hostpolicy.dll"不是在" C: Program Files dotnet"中找到。无法作为一个独立的人奔跑app。

挖掘出来后,我发现了问题的根源:

测试二进制文件夹中<my module>.runtimeconfig.json中的完整路径高于255个字符。重命名模块,因此文件路径变短,解决了问题。

这是当Visual Studio 2019 Preview升级.NET核心到最新预览时发生的。(特别是.NET CORE 3.1.100-PREVIEW2-014569)。

重新安装/修复.NET CORE 3.0.100为我解决了问题。

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

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

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

如果设置为 Portable 它将选择感觉舒适的任何运行时(您可能没有安装它)

<<对我来说,问题是版本不匹配。我安装了不同的" .NET Core SDK"版本,并且在.json文件中指定了不同的版本。

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

在我的情况下,这是因为我正在发布一个自我包含错误目标的申请。我的目的是在Alpine 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目录页面,则可以避免。😅

也许您不想执行" console .net core"项目,而是一个"控制台.NET框架"项目。它对我解决了问题...

我的问题是我有 2 .NET Core App Projects ,一个是取决于另一个(然后我可以从该应用程序执行该应用程序)但是.NET Core Applications (带有默认配置)需要&lt; assembly name&gt; .runtimeconfig.json file (获取某些启动config)默认不复制。


对我有用的唯一解决方案是增加了项目属性&gt;构建事件(依赖项目的) 此命令:

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

但是,您也可以通过手动复制&lt;依赖项组件名称&gt; .runtimeconfig.json文件。


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

此错误非常通用。所以真正的问题可以是任何东西。

在我的情况下(如果有帮助的人),我创建了一个class Library项目而不是控制台应用程序项目。

类库dll不能用msbuild运行,即使它具有主要方法。只有控制台应用程序DDL可以作为dotnet <appname>.dll

i在使用 vstest@2 任务中运行单元测试时遇到的错误Azure Devops。就我而言,问题在于我的 testAssemblyver2 值。我为测试DLL提供了错误的模式。

下面一个对我有用。

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

因此,尝试为tostAssemblyver2输入提供正确的模式值。确保仅过滤所需的dll。

添加属性组上的outputType并解决了问题

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>
</Project>

可以在此处找到有关此MSBUILD的更多信息也不会在Visual Studio 2019中运行。

我在项目属性页面上发现了目标框架设置为.NET Core 3.0。

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

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

促进Voltrevo的我认为这应该是问题的最常见情况。当您构建解决方案时,有时您可能会获得带有输出箱和OBJ的2个目录。" bin"目录具有运行dotnet.exe命令所需的一切。只需从bin目录中奔跑,事情就应该很好。:)

对我来说,使用ASP.NET Core 2.0在Azure上,appName.deps.json可以做到这一点。您需要将其从构建目录复制到Azure。

对我来说,由于其中一个项目,该错误发生在Sonarqube覆盖范围内。项目引用对MSTest项目。

我面临这个问题,我花了几天的时间来找出解决方案。

  1. 转到Visual Studio Installer。
  2. 单击Visual Studio的"更多"选项。
  3. 选择"维修"。

下载和安装需要一些时间。完成后,重新启动机器,然后重试。这应该解决问题。

也有相同的问题。我们安装了新框架,但从未重新启动IIS。通过此命令重新启动IIS修复了它: iisreset /restart

我在修改启动stettings.json后使用.net maui .net6开始收到此错误。显然,由于配置选项无效,错误正在抛出。我重命名为文件并允许其再生,然后解决错误。比较两者时,我假设我更改的值之一与项目不兼容。

最新更新