簡體   English   中英

將 .NET Core 控制台應用程序部署到 Azure WebJobs 時加載 hostpolicy.dll 時出錯

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

我已按照本教程將 .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 dotnet的版本是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-*"
    }

我必須添加節點運行時(win10-x64,否則應用程序無法在本地運行)。 但是,Azure Web 服務運行在 Windows Server 2012 上。這可能是個問題嗎?

我錯過了什么?

好吧,我已經想通了。

如果要將 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>

當我將 run.cmd 的內容從

dotnet MyWorker.dll

MyWorker.exe

如果應用程序的位數與應用服務的位數不匹配(例如,將 64 位部署發布到以 32 位模式運行的應用服務),則可能會發生此錯誤。

為了解決這個問題,我必須在 Azure 中將位數更改為正確的設置:

在此處輸入圖片說明

為了匹配我在 VS 中發布配置文件的位數:

在此處輸入圖片說明

本主題中的所有其他答案都沒有幫助我。 但是后來我注意到dotnet --list-runtimes我在我的電腦 (3.1.18) 上使用了比 Azure 應用服務 (3.1.16) 默認安裝的新版本的 dotnet 核心。 一旦我安裝了“ASP.NET Core 3.1 (x64) Runtime”和版本 3.1.18 作為應用服務配置中的擴展,問題就消失了。 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM