将 .NET Core 控制台应用程序部署到 Azure WebJobs 时加载 hostpolicy.dll 时出错
Error loading hostpolicy.dll while deploying .NET Core console app to Azure WebJobs
我已按照此 tutorial 将 .NET Core 控制台应用程序部署到 Azure Web 服务 WebJob。
我的应用程序在本地 运行ning 没有任何问题(使用 dotnet 1.0.0-preview2-003131)但是当我尝试 运行 它时从 Azure 控制台我有以下错误:
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]
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-*"
}
我不得不添加节点运行次(win10-x64,否则应用程序无法在本地运行)。但是,Azure Web 服务 运行正在 Windows Server 2012 上运行。这可能是个问题吗?
我错过了什么?
好的,我知道了。
如果要将 dotnet 核心应用程序部署到 Azure Web 服务,请包含运行时“win7-x86”,前提是您 运行 您的应用程序在 32-位平台模式.
对于 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 作为扩展,问题就消失了。
我已按照此 tutorial 将 .NET Core 控制台应用程序部署到 Azure Web 服务 WebJob。
我的应用程序在本地 运行ning 没有任何问题(使用 dotnet 1.0.0-preview2-003131)但是当我尝试 运行 它时从 Azure 控制台我有以下错误:
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]
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-*"
}
我不得不添加节点运行次(win10-x64,否则应用程序无法在本地运行)。但是,Azure Web 服务 运行正在 Windows Server 2012 上运行。这可能是个问题吗?
我错过了什么?
好的,我知道了。
如果要将 dotnet 核心应用程序部署到 Azure Web 服务,请包含运行时“win7-x86”,前提是您 运行 您的应用程序在 32-位平台模式.
对于 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 作为扩展,问题就消失了。