【问题标题】:asp.net core 2.1 HTTP Error 502.5asp.net 核心 2.1 HTTP 错误 502.5
【发布时间】:2018-08-26 03:27:34
【问题描述】:

当我尝试运行我的解决方案时,我正在浏览器中:

HTTP 错误 502.5 - 进程失败

调试在启动后几乎立即停止,并且在 Visual Studio 中没有错误消息。

在输出窗口中,这是唯一的消息:

程序“[30700] dotnet.exe”已退出,代码为 -2147450730 (0x80008096)。

项目运行良好,我刚刚安装了一个 nuget 包,这开始发生了。我尝试删除它并删除包缓存,但它仍然会发生。

事件查看器显示 IIS Express AspNetCore 模块出错。

物理根目录为“E:\path\ProjectName\”的应用程序“MACHINE/WEBROOT/APPHOST/PROJECTNAME”无法使用命令行“e:\program files (x86)\microsoft visual studio\2017\community\common7 启动进程” \ide\extensions\microsoft\web tools\projectsystem\VSIISExeLauncher.exe -argFile "C:\Users\username\AppData\Local\Temp\tmp49E1.tmp"', ErrorCode = '0x80004005 : 0.

我有点迷茫,因为没有错误可以继续。

有什么想法吗?

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    好吧!这是由于适当的 .NET Core SDK 缺失问题。您的项目的包版本高于您机器上安装的 SDK 版本。

    从此处下载最新版本 v2.1.401(在该答案时):Download .NET Core SDK 并安装它。

    现在重新启动计算机并再次运行项目。

    希望您的问题能得到解决!

    【讨论】:

    • 谢谢,我将项目从 2.1.3 降级到 2.1.2 并且成功了。
    • 很高兴听到您的问题已解决!也谢谢你。
    【解决方案2】:

    虽然已经回答了,但我将在此处发布针对相同问题的解决方案(在 Asp.NET CORE 2.1 上启动我的 webapp 时出现 HTTP 错误 502.5,错误代码 0x80004005),但原因不同,作为另一种可能性的参考.


    简答:

    如果应用程序的名称上有空格(字符),则当前版本的 Visual Studio (15.8.9) 有一个错误,它不包含引号以使其成为在 web.config 文件上执行时(通过命令行)的文字字符串参数,在发布您的 web 应用程序时生成。

    例子:

    web.config 由 Visual Studio 生成(版本 15.8.9 - 日期:2018-11-05):

    [...]
    <aspNetCore processPath="dotnet" arguments=".\My Web App.dll" stdoutLogEnabled=... />
    [...]
    


    web.config 引用正确:

    [...]
    <aspNetCore processPath="dotnet" arguments='".\My Web App.dll"' stdoutLogEnabled=... />
    [...]
    

    您可以在第二个示例的 arguments 属性上看到,我包括(手动)单引号,使其在执行时将完整字符串 ".\My Web App.dll" 作为参数传递。



    详细回答:

    每次我为更新的 SDK 更新我的 Visual Studio(并在我的应用程序中使用最新版本的 Asp.net Core)时,它都会给我 Http 错误 502.5,IF 我不更新我服务器上的运行时库也是如此。所以,很明显,我做的第一件事就是更新服务器上的运行时库(这总是为我解决了这个问题),但这一次它没有奏效。

    所以,开始排除故障,我只是尝试从命令行(提示符)启动我的 webapp,并且它启动得很完美。

    所以,我知道我的 web 应用程序的启动方式有问题。起始配置(在 asp.net 核心上)在 web.config 文件中。

    [...]
    <aspNetCore processPath="dotnet" arguments=".\My Web App.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    [...]
    

    在 Asp.net Core 中,Web 应用程序由 IIS 从 Windows 上的命令行(提示符)启动/执行(严格来说,我说的是常见场景)。

    到目前为止,它总是在发布的文件之间有一个.exe 文件,这是整个事情的开始,这是 IIS 模块通过命令行调用的文件。

    由于 Asp.net CORE 2.1(以及一些我不确切知道的小更新),没有 .exe 文件,并且 Web App 的 PATH 是通过参数传递的。因此,您在web.config 文件中拥有dotnet 的命令和指定为argument 属性的该命令的参数。 (如上例所示)

    查看我发布的web.config 文件,您可以看到processPath 和arguments 属性。在之前的测试中,我知道dotnet 是一个公认的命令,因为我能够在 windows 命令提示符下启动我的 webapp。然后,仔细查看arguments 属性,我发现该值没有(环绕)引号,其中包含空格字符。

    所以在我的 webapp 启动时,dotnet 命令接收的是完整路径 .\My Web App.dll,它接收了 3 个不同的参数:.\My、Web、App.dll。

    由于arguments属性的值是通过命令行传递的,所以传递到命令行时必须有引号,变成文字字符串。

    所以我在arguments 属性值上手动添加了必要的引号,在web.config 文件中,我的网络应用程序开始完美运行!

    要查看错误示例以及如何纠正错误,请查看“简答”示例。


    其他有用信息(适用于 Asp.net Core 2.0 及更高版本,使用 Windows / IIS):

    如果您的 Web 应用程序正在运行,但不再运行,则给出错误 502.5:

    这可能是运行时库的版本问题。您的 webapp 要求更新的 asp.net 核心库,而您的服务器还没有它们。 只需更新服务器上的运行时库,它应该可以解决问题。从 Microsoft 下载(当前版本为 Asp.net Core 2.1,您可以通过此链接下载:https://www.microsoft.com/net/download/dotnet-core/2.1)。


    如何手动启动您的 web 应用,以便更好地进行故障排除:

    打开windows命令提示符,尝试执行命令dotnet。如果无法识别,则必须安装(或修复)asp.net core 模块和依赖项(google 是您的朋友。只需搜索如何安装 asp.net core)。或者,您可以使用命令dotnet --version 检查 Asp.net Core 运行时库版本。

    一旦dotnet 命令被识别,您就可以手动启动您的webapp。 导航到您的 webapp 文件所在的文件夹(通常位于 inetpub、wwwroot 等中)。然后,找到作为应用程序程序集的.dll 文件。通常,它将具有您的应用程序的名称(很简单,对吧!?)。然后,使用命令dotnet ".\My Web App.dll" 执行它。

    例子:

    如果出现错误,您会在提示窗口中看到一些有用的信息。如果webapp正常启动,那么就是启动配置有问题,可能是web.config文件。


    另一种查看asp.net核心故障详细信息的方法:

    https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/troubleshoot?view=aspnetcore-2.1#application-event-log

    访问应用程序事件日志:

    1. 打开“开始”菜单,搜索 Event Viewer,然后选择 Event Viewer 应用。
    2. 在事件查看器中,打开 Windows 日志节点。
    3. 选择应用程序以打开应用程序事件日志。
    4. 搜索与失败的应用程序相关的错误。错误的值为 IIS AspNetCore Module 或 IIS Express AspNetCore Module 在 来源列。


    我的问题的详细信息:

    执行请求时,出现的错误是:HTTP Error 502.5 - Process Failure。

    查看事件查看器(Windows 服务器),信息是:“应用程序 '...我的 Web 应用程序',物理根目录为 'C:\ ... \ ... \' 无法使用命令行启动进程' dotnet .\My Web App.dll', ErrorCode = '0x80004005 : 1."

    所以我的错误代码是:0x80004005,子代码是1。

    希望它可以帮助某人:)

    【讨论】:

      猜你喜欢
      • 2016-12-31
      • 2017-08-27
      • 2018-11-04
      • 1970-01-01
      • 2018-03-12
      • 2017-06-16
      • 1970-01-01
      • 2018-02-24
      • 2018-11-15
      相关资源
      最近更新 更多