将 .NET Core 控制台应用程序部署到 Azure WebJobs 时加载 hostpolicy.dll 时出错

Posted

技术标签:

【中文标题】将 .NET Core 控制台应用程序部署到 Azure WebJobs 时加载 hostpolicy.dll 时出错【英文标题】:Error loading hostpolicy.dll while deploying .NET Core console app to Azure WebJobs 【发布时间】:2017-07-12 19:33:16 【问题描述】:

我已按照tutorial 将 .NET Core 控制台应用程序部署到 Azure Web 服务 WebJob。

我的应用程序在本地运行没有任何问题(使用 dotnet 1.0.0-preview2-003131)但是当我尝试从 Azure 控制台运行它时出现以下错误:

[D:\local\VirtualDirectory0\site\wwwroot\app_data\jobs\triggered\PopcornExportWebJob\hostpolicy.dll]加载dll失败,HRESULT: 0x800700C1**

[D:\local\VirtualDirectory0\site\wwwroot\app_data\jobs\triggered\PopcornExportWebJob]加载所需的库hostpolicy.dll时出错

Azure .Net的版本是1.0.0-rc4-004771,hostpolicy.dll文件和我本地使用的一样。事实上,当我从 Azure 下载部署的 zip 并在本地运行它时,它运行良好。但它在 Azure 环境中失败。

另外,这是我的 project.json:


      "publishOptions": 
        "include": [
          "run.cmd"
        ]
      ,
      "buildOptions": 
        "emitEntryPoint": true,
        "copyToOutput": "appsettings.json"
      ,
      "copyright": "bbougot",
      "dependencies": 
        "FubarCoder.RestSharp.Portable.Core": "4.0.7",
        "FubarCoder.RestSharp.Portable.HttpClient": "4.0.7",
        "Microsoft.ApplicationInsights.AspNetCore": "2.0.0",
        "Microsoft.Extensions.Configuration": "1.1.0",
        "Microsoft.Extensions.Configuration.Json": "1.1.0",
        "Microsoft.Extensions.DependencyInjection": "1.1.0",
        "Microsoft.Extensions.Logging": "1.1.0",
        "Microsoft.Extensions.Logging.Console": "1.1.0",
        "Microsoft.NETCore.App": "1.1.0",
        "MongoDB.Driver": "2.4.2",
        "StructureMap.Microsoft.DependencyInjection": "1.3.0"
      ,
      "description": "Popcorn Api Exporter",
      "frameworks": 
        "netcoreapp1.1": 
          "imports": [
            "portable-net45+win8"
          ]
        
      ,
      "runtimes": 
        "win10-x64": 
      ,
      "scripts": 
        "postpublish": [ "7za.exe a -tzip PopcornExport.zip .\\bin\\Release\\PublishOutput\\*", 
                         ".\\WAWSDeploy.exe .\\PopcornExport.zip .\\popcornexport.PublishSettings /t app_data\\jobs\\triggered\\PopcornExportWebJob /v /d" ]
      ,
      "title": "PopcornExport",
      "version": "1.0.0-*"
    

我必须添加节点 runtimes(win10-x64 否则应用程序无法在本地运行)。但是,Azure Web 服务正在 Windows Server 2012 上运行。这可能是个问题吗?

我错过了什么?

【问题讨论】:

类似问题The library hostpolicy.dll was not found 【参考方案1】:

好的,我想通了。

如果您想将 dotnet 核心应用部署到 Azure Web 服务,如果您在 32 位平台模式下运行应用,请包含运行时“win7-x86”。

对于 Visual Studio 2015 解决方案,您的 project.json 应包括:

  "runtimes": 
    "win10-x64": ,
    "win7-x86":  //IMPORTANT FOR AZURE DEPLOY
  ,

或者,如果您已经迁移到 Visual Studio 2017,您的 .csproj 应将其包含在 PropertyGroup 中:

<RuntimeIdentifiers>win10-x64;win7-x86</RuntimeIdentifiers>

此外,您的发布配置文件应包含相同的内容:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PublishProtocol>FileSystem</PublishProtocol>
    <Configuration>Release</Configuration>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <PublishDir>bin\Release\PublishOutput</PublishDir>
    <RuntimeIdentifier>win7-x86</RuntimeIdentifier> // IMPORTANT
  </PropertyGroup>
</Project>

【讨论】:

请帮助将其标记为答案,以帮助更多有类似问题的社区。​​span> 使用 VS2017,此解决方案有效 - 但我必须颠倒运行时标识符的顺序,因为它一直默认为 win10 配置,并且当我在 UI 中更改它时 - 直到我将 csproj 更改为: &lt;RuntimeIdentifiers&gt;win7-x86;win10-x64&lt;/RuntimeIdentifiers&gt; 这个答案今天救了我的培根……+1 谢谢!我觉得奇怪的是 win10-x64 阻止了与我们的数据库的正确通信。为什么 Windows 10 不是官方支持的 Azure 版本? 非常感谢,这拯救了我的一天!除了提到的@Steveland83,runtimeIdentifiers 的顺序对我来说不是问题。【参考方案2】:

当我更改 run.cmd 的内容时,我不再看到此错误

dotnet MyWorker.dll

MyWorker.exe

【讨论】:

这也导致了我的修复,尽管它在我的 web.config 中:来自:&lt;aspNetCore processPath="dotnet" arguments=".\MyWorker.dll" ... /&gt; 到:&lt;aspNetCore processPath=".\MyWorker.exe" ... /&gt;【参考方案3】:

如果您的应用程序的位数与您的应用服务的位数不匹配(例如,将 64 位部署发布到以 32 位模式运行的应用服务),则可能会发生此错误。

为了解决这个问题,我必须在 Azure 中将位数更改为正确的设置:

为了匹配我在 VS 中发布配置文件的位数:

【讨论】:

【参考方案4】:

本主题中的所有其他答案都对我没有帮助。但后来我注意到dotnet --list-runtimes 在我的电脑(3.1.18)上使用了比 Azure 应用服务(3.1.16)默认安装的更新版本的 dotnet core。一旦我在应用服务配置中安装了“ASP.NET Core 3.1 (x64) Runtime”,版本为 3.1.18 作为扩展,问题就消失了。

【讨论】:

以上是关于将 .NET Core 控制台应用程序部署到 Azure WebJobs 时加载 hostpolicy.dll 时出错的主要内容,如果未能解决你的问题,请参考以下文章

通过 Azure Devops 将 .Net Core 3.1 Web 应用程序部署到 Azure Linux Web 服务时出错

从 3.1 升级后的 .NET Core 5.0 Azure 部署 CORS 问题

将 ASP.NET Core 部署到 IIS UI 和 API 到单独的网站

将 asp.net core web api 部署到 aws elastic beanstalk 时出现错误 404

到 Azure ACI 的基本容器化 ASP.NET 3.1 Core 应用部署失败

ASP.NET Core部署系列一:发布到IIS上