【问题标题】:The library hostpolicy.dll was not found找不到库 hostpolicy.dll
【发布时间】:2016-10-31 07:48:21
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

我在 VS19 中运行测试时遇到了类似的问题。

========== 开始测试运行==========

Testhost 进程退出并出现错误:遇到致命错误。这 执行应用程序所需的库“hostpolicy.dll”不是 在“C:\Program Files\dotnet”中找到。无法独立运行 应用程序。

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

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

【讨论】:

    【解决方案2】:

    我在 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。

    【讨论】:

      【解决方案3】:

      这个错误很笼统。所以真正的问题可能是任何事情。

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

      不能使用 MSBuild 运行类库 DLL,即使它具有 Main 方法。 只有 Console Application DDL 可以运行为dotnet <appname>.dll

      【讨论】:

        【解决方案4】:

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

        为此有一个 Github issue 和一个 workaround

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

        【讨论】:

          【解决方案5】:

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


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

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

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


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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • 请问你对这个文件做了什么
            • @YoussefSherif 您需要将其从构建目录复制到 Azure。我认为它可以省略,但显然不能。
            【解决方案7】:

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

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

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                • 如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。 - From Review
                • 谢谢。我只是分享我如何在构建中修复相同的错误。 :)
                【解决方案10】:

                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] 工作。

                【讨论】:

                • 这个答案与我部分相关,因为我也在使用 dotnet core 2.0。不确定我是否对我的工作区做了一些奇怪的事情,但我还发现objbin 目录中都有.dll。我在obj 中,并意识到bin 中的那个已经有了这个.runtimeconfig.json 文件。运行该程序无需更改。
                • 这也是我使用 dotnet core 3.0 preview 8 的解决方案
                【解决方案11】:

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

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

                【讨论】:

                  【解决方案12】:

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

                  【讨论】:

                    【解决方案13】:

                    我在使用 .NET Core 3.0 WPF 应用时遇到了同样的问题,但我发现我的应用也无法在 Visual Studio 2019 中运行。

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

                    我最近更新了 VS 2019,它也安装了 .NET Core 3.1,所以我在下拉菜单中切换到它,它又可以工作了。

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

                    【讨论】:

                      【解决方案14】:

                      就我而言,这是因为我为错误的目标发布了一个独立的应用程序。我的意图是在 alpine 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 这本可以避免。 ?

                      【讨论】:

                        【解决方案15】:

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

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

                        【讨论】:

                          【解决方案16】:

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

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

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

                          【讨论】:

                          • @NickAcosta - 我想这些问题是工具是 preview2 而不是 rtm 的原因(该错误的里程碑是 1.0.0-rtm)。只有运行时是 rtm。
                          • 这如何与新的 Visual Studio 2017 RC 项目一起工作,微软已经放弃了 project.json 支持 .csproj 文件?据我所知,我的项目设置为创建一个可执行文件。
                          • 我在 csproj 文件中也看到过这种情况,针对 aspnetcore 项目中的 netcoreapp1.1。
                          • 是的,我有一个针对 1.1 的 csproj,第一次编译时出现此错误。如果我连续编译两次,该应用程序总是运行.....
                          • @Carson - 使用安全修复更新到 1.1.1 并更新到最新的 2017RC 为我解决了这个问题。
                          猜你喜欢
                          • 2020-08-03
                          • 1970-01-01
                          • 2017-12-21
                          • 1970-01-01
                          • 2017-02-02
                          • 2018-08-22
                          • 2018-07-24
                          • 2014-12-13
                          相关资源
                          最近更新 更多