我正在尝试将aspnet核心应用程序部署到Azure。这似乎已经通过确定,但是当我尝试启动应用程序时,我会遇到以下错误...
此问题的常见原因:
申请流程未能启动 应用程序进程已启动但随后停止 应用程序进程已启动但无法侦听已配置的端口
故障排除步骤:
检查系统事件日志以获取错误消息 启用日志记录应用程序进程的stdout消息 将调试器附加到应用程序进程并检查
在这方面似乎有很多关于IIS的文章而不是Azure,所以我不知道接下来要去哪里看看。 Azure日志未指明任何内容。
Microsoft文档向我提供此信息......
平台与RID冲突
浏览器:HTTP错误502.5 - 进程失败
应用程序日志: - 应用程序错误:错误模块:KERNELBASE.dll 异常代码:0xe0434352错误模块路径: C:\ WINDOWS \ system32 \ KERNELBASE.dll - IIS AspNetCore模块:失败 使用命令行'“dotnet”启动进程。\ my_application.dll' (便携式应用)或'“PATH \ my_application.exe”'(自包含应用), ErrorCode ='0x80004005'。
ASP.NET核心模块日志:未处理的异常: System.BadImageFormatException:无法加载文件或程序集 'teststandalone.dll'或其依赖项之一。一次尝试 加载格式不正确的程序。
故障排除:
如果您发布了自包含的应用程序,请确认您没有 在project.json的buildOptions中设置一个与平台冲突的平台 发布RID。例如,不要指定x86和的平台 使用RID为win81-x64发布(dotnet发布-c Release -r win81-64)。项目将在没有警告或错误的情况下发布但失败 在服务器上记录上述例外情况。
...但实际上并没有告诉我这些设置对于Azure应该是什么(或者如果它在那里是相关的),所以我不确定这是不是红鲱鱼。我没有在我的dotnet发布配置中指定-r开关。
我设法找到了一个事件日志,它抛出了一些重复记录的XML ......
无法使用命令行'“%LAUNCHER_PATH%”启动进程 %LAUNCHER_ARGS%',ErrorCode ='0x80070002'。
经过更多调查后,我发现自己需要更改%LAUNCHER_PATH%和%LAUNCHER_ARGS%值。我已尝试对web.config进行各种更改,但没有运气。我的web.config现在看起来像这样......
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--
Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
-->
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="dotnet" arguments="site\wwwroot\Esoterix.Modle.Portalweb.dll" stdoutLogEnabled="true" stdoutLogFile="LogFiles\stdout" forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>
这些路径来自Azure部署的根目录,它似乎适用于stdout日志文件路径(我收到了错误报告)但不适用于应用程序本身。我仍然看到以下错误..
<Event>
<System>
<Provider Name="IIS AspNetCore Module"/>
<EventID>1000</EventID>
<Level>0</Level>
<Task>0</Task>
<Keywords>Keywords</Keywords>
<TimeCreated SystemTime="2016-11-28T19:31:32Z"/>
<EventRecordID>1514022203</EventRecordID>
<Channel>Application</Channel>
<Computer>RD0004FFD7108D</Computer>
<Security/>
</System>
<EventData>
<Data>Failed to start process with commandline '"dotnet" site\wwwroot\Esoterix.Modle.Portalweb.dll', ErrorCode = '0x80004005'.</Data>
</EventData>
</Event>
重复4次
如果我查看我的标准输出,我有以下内容......
无法从[\?\ D:\ home \ site \ wwwroot \ hostpolicy.dll]加载dll, HRESULT:0x800700C1
从中加载所需的库hostpolicy.dll时发生错误 [\ \ d?:\家\站点\ wwwroot的]
如果我尝试直接使用web配置运行exe ...
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--
Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
-->
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="\\?\%home%\site\wwwroot\Esoterix.Modle.Portalweb.exe" arguments="" stdoutLogEnabled="true" stdoutLogFile="\\?\%home%\LogFiles\stdout" forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>
然后我的stdout给了我以下错误......
无法从[\?\ D:\ home \ site \ wwwroot \ hostfxr.dll]加载dll, HRESULT:0x80070057
找到了库hostfxr.dll,但是从中加载了它 \?\ D:\ home \ site \ wwwroot \ hostfxr.dll失败
安装.NET Core先决条件可能有助于解决此问题。
答案 0 :(得分:1)
我通过添加对dotnet-publish-iis的引用来解决这个问题。
有关如何执行此操作的详细信息记录在https://github.com/aspnet/Hosting/issues/892
的github问题中