web-dev-qa-db-ja.com

.NET CoreコンソールアプリをAzure Webジョブにデプロイする際のhostpolicy.dllの読み込みエラー

私は チュートリアル に従って、.NET CoreコンソールアプリケーションをAzure WebサービスWebJobにデプロイしました。

アプリはローカルで問題なく実行されています(dotnet1.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ファイルはローカルで使用しているものと同じです。実際、デプロイのZipをAzureからダウンロードしてローカルで実行すると、問題なく動作します。しかし、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上で実行されています。問題になるのでしょうか?

私は何を取りこぼしたか?

11
Ben

わかった、わかった。

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

Run.cmdの内容を次のように変更すると、このエラーが表示されなくなりました

dotnet MyWorker.dll

MyWorker.exe

2
x5657