简体   繁体   中英

Error loading hostpolicy.dll while deploying .NET Core console app to Azure WebJobs

I have followed this tutorial to deploy a .NET Core console application to an Azure Web Service WebJob.

My app is running locally without any issue (with dotnet 1.0.0-preview2-003131 ) but when I try to run it from Azure console I have the following error :

Failed to load the dll from [D:\\local\\VirtualDirectory0\\site\\wwwroot\\app_data\\jobs\\triggered\\PopcornExportWebJob\\hostpolicy.dll], HRESULT: 0x800700C1

An error occurred while loading required library hostpolicy.dll from [D:\\local\\VirtualDirectory0\\site\\wwwroot\\app_data\\jobs\\triggered\\PopcornExportWebJob]

The version of Azure dotnet is 1.0.0-rc4-004771 and the hostpolicy.dll file is the same than I use locally. In fact, when I download the zip of my deploy from Azure and when I run it locally, it is working fine. But it fails on Azure environment.

Also, here is my 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-*"
    }

I had to add the node runtimes (win10-x64 otherwise the app can't run locally). But, the Azure Web Service is running on Windows Server 2012. May it be an issue?

What did I miss?

Alright, I've figured it out.

If you want to deploy a dotnet core app to Azure Web Service, include the runtime " win7-x86 " if you are running your app in 32-Bit platform mode.

For a Visual Studio 2015 solution, your project.json should include :

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

Or if you have already migrated to Visual Studio 2017, your .csproj should include this in PropertyGroup:

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

Also, your publish profile should include the same thing:

<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>

I stopped seeing this error when I changed the contents of run.cmd from

dotnet MyWorker.dll

to

MyWorker.exe

This error could happen if the bitness of your application doesn't match the bitness of your App Service (eg publishing a 64-bit deployment to an App Service running in 32-bit mode).

To solve this I had to change the bitness to the correct setting in Azure:

在此处输入图片说明

To match the bitness of my publish profile in VS:

在此处输入图片说明

All the other answers in this topic didn't help me. But then I noticed with dotnet --list-runtimes that I used a newer version of dotnet core on my pc (3.1.18) than was installed by default for the Azure App Service (3.1.16). Once I installed "ASP.NET Core 3.1 (x64) Runtime" with Version 3.1.18 as an Extension in the app service configuration, the problem went away. 在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM