从 2.2 迁移到 3.1 的 ASP.Net Core 解决方案在发布时不会运行

Jas*_*win 5 asp.net iis asp.net-core

这是我从 ASP.Net Core 2.2 更新到 3.1 的第二个项目。第一个运行良好。第二个在 Visual Studio (2019) 中运行良好,但是当您发布它并从 dotnet CLI 运行它时,控制台会无限期挂起,控制台中没有输出,我启用了 stdout,输出文件为零字节。

该解决方案托管在 IIS 中,当我尝试通过 IIS 运行它时,我在应用程序事件日志中看到以下条目:

具有物理根目录 'D:\wwwroot\InclusionService_UAT\' 的应用程序 '/LM/W3SVC/2/ROOT' 无法使用命令行 'C:\Program Files\dotnet\dotnet.exe .\InclusionService.Web.dll' 启动进程阶段 'PostStartCheck',ErrorCode = '0x8027025a',分配端口 12973,retryCounter '1'。

具有物理根目录 'D:\wwwroot\InclusionService_UAT\' 的应用程序 '/LM/W3SVC/2/ROOT' 无法使用命令行 'C:\Program Files\dotnet\dotnet.exe .\InclusionService.Web.dll' 启动进程多次重试。无法绑定到端口“35033”。从多次重试中捕获的 stdout 和 stderr 日志的前 30KB 字符:不再显示

这是我的 Program.cs,在我的其他迁移解决方案中完全相同:

public static void Main(string[] args)
{
    var builder = new HostBuilder()
       .ConfigureWebHostDefaults(opt =>
       {
             opt.UseStartup<Startup>();
             opt.UseIISIntegration();
        });

    var host = builder.Build();
    host.Start();
}
Run Code Online (Sandbox Code Playgroud)

如果有一些输出,调试会容易得多,但没有什么可继续的。

Yus*_*sh0 2

我还必须确保 web.config 是正确的,因为它在发布时不会再被覆盖(至少在独立时)。它应该如下所示:

<?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=".\MyApp.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>
Run Code Online (Sandbox Code Playgroud)

指定 HostingModel 对我来说很有效。

program.cs 似乎没有什么区别,但它看起来如下(不推荐使用 WebHostBuilder):

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseContentRoot(Directory.GetCurrentDirectory())
            .UseStartup<Startup>()
            .UseIIS();
        });
Run Code Online (Sandbox Code Playgroud)