将 .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 更改为:<RuntimeIdentifiers>win7-x86;win10-x64</RuntimeIdentifiers>
这个答案今天救了我的培根……+1 谢谢!我觉得奇怪的是 win10-x64 阻止了与我们的数据库的正确通信。为什么 Windows 10 不是官方支持的 Azure 版本?
非常感谢,这拯救了我的一天!除了提到的@Steveland83,runtimeIdentifiers 的顺序对我来说不是问题。【参考方案2】:
当我更改 run.cmd 的内容时,我不再看到此错误
dotnet MyWorker.dll
到
MyWorker.exe
【讨论】:
这也导致了我的修复,尽管它在我的 web.config 中:来自:<aspNetCore processPath="dotnet" arguments=".\MyWorker.dll" ... />
到:<aspNetCore processPath=".\MyWorker.exe" ... />
【参考方案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