我的情况是,我将一些nuget软件包升级到了net core 2.2版本,但是我没有安装net core 2.2的sdk,所以我去了net core网站下载了最新的sdk或运行时包,并在管理员CMD中执行了net stop was /y
和net start w3svc
命令。问题已经解决。
在尝试从VS2017发布到生产Windows 2016服务器后,我遇到了此错误。(在我的本地Win10 PC上的IIS Express中正常工作。)
我更新了包,所有版本都匹配并在我的代码中得到更新,.NET Core版本也匹配,重新启动IIS,重启……但仍然不行。
在发布> 配置> 设置(左侧选项卡)中,我必须将目标运行时从“Portable”设置为“win-x64” (或者与您的环境相关的任何内容)。 我还选择“在目标位置删除其他文件。”
“Portable”是默认设置。 我不确定“Portable”运行时需要什么才能正常工作,但如果您不需要“Portable”运行时,则可以节省其他人的时间。
一般来说,如果我的环境中有不匹配的东西,我会遇到这个错误。例如,有一次我将我的一个项目从2.2升级到.Net Core 3.1,但是没有在服务器上安装ASP.NET Core Runtime Hosting Bundle:
https://dotnet.microsoft.com/download/dotnet-core/3.1
此外,如果你的应用程序池设置为启用32位应用程序,则可能会出现此错误。尝试:
IIS管理器 > 应用程序池 > 应用程序池名称 > (右键单击)高级设置 > 启用32位应用程序 = 假
我遇到了这个问题,并找到了一个不同的解决方案。对于我来说,问题出在一个包与应用程序不兼容(我已经在NuGet上更新了它,但是库在生产环境中没有被替换)。更新这个包对我起了作用。
需要注意的是:我必须手动运行dotnet.exe并使用项目dll才能看到为我解决问题的消息。
希望这能帮助后来遇到类似问题的人。
$ dotnet ./project.dll
确实揭示了实际问题,修复该问题显然起作用了。 - Bob Meijwaard$ dotnet ./project.dll
,然后按照建议转到 localhost:5000。在这里,我看到了导致我找到解决方案的错误日志。对我来说,问题出在 appsettings.Development.json 的语法错误上。真是匪夷所思。 - Rial Johnson你有两个解决方案(此答案适用于Windows服务器,我不知道Linux服务器)。
第一个方案:
将项目的所有文件夹(除了bin和obj文件夹)复制到服务器上。
在项目文件夹中打开cmd,然后运行此命令:dotnet run
,然后会显示所有警告和错误信息(如果你遇到关于以上命令无法识别的错误,请从此链接下载dot net core sdk)。
第二个方案:
在我的情况下,web.config如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\BMS.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" />
</system.webServer>
</location>
</configuration>
我会将其更改为:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\BMS.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
似乎每个人都有不同的答案。我也遇到了这个问题。您可以看到,有很多不同的原因导致了这个问题。如果您找不到任何这些解决方案有用或者试图通过所有这些不同的解决方案时出现问题,您可以尝试从发布文件夹中的命令行运行应用程序。
发布后,如果您收到此错误,请转到您的发布文件夹,然后打开一个命令/终端窗口,接着输入dotnet .\YourStartupProject.dll
,您应该会收到一个异常错误,这将使解决问题更加容易。
例如,这是我在没有设置SQL服务器的新环境上尝试时收到的错误,并且当然会收到此错误。
Application startup exception: System.Exception: Could not resolve a service of type
'YourStartupProject.DataServices.DbContext.DbContext' for the parameter
'context' of method 'Configure' on type 'YourStartupProject.Startup'. --->
System.ArgumentNullException: Value cannot be null.
Parameter name: connectionString
一旦您解决了错误,请再次尝试,反复多次。
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureKestrel(o => o.AddServerHeader = false);
});
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseKestrel(options => options.AddServerHeader = false)
.UseStartup<Startup>();
}
部署后,错误502.5 ANCM启动失败消失了 :) 希望这个答案可以帮助其他人。
顺便说一下,我知道这篇文章与NETCore2.2有关,我们也遇到了同样的问题,但我们决定切换到NETCore3.1,因为NETCore2.2不再受支持,并且在其他一些方面也存在缺陷。
dotnet publish
创建的一个 web.config 条目 stdoutLogFile=".\logs\stdout"
引起的。正确的值应该是 stdoutLogFile="\\?\%home%\LogFiles\stdout"
。create a directory in root of your project : logs/stdout
open the web.config file from root of your project and find this line:
<aspNetCore processPath=".\web.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
set stdoutLogEnabled
as true
and save it
reload your app and see the logs in the directory : logs/stdout