虽然已经回答了,但我将在此处发布针对相同问题的解决方案(在 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
访问应用程序事件日志:
- 打开“开始”菜单,搜索 Event Viewer,然后选择 Event Viewer 应用。
- 在事件查看器中,打开 Windows 日志节点。
- 选择应用程序以打开应用程序事件日志。
- 搜索与失败的应用程序相关的错误。错误的值为 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。
希望它可以帮助某人:)