【问题标题】:Application is running inside IIS process but is not configured to use IIS server .NET Core 3.0应用程序在 IIS 进程内运行,但未配置为使用 IIS 服务器 .NET Core 3.0
【发布时间】:2020-01-24 13:56:48
【问题描述】:

我已将我们的应用程序从 .NET Core 2.2 迁移到 3.0 版。实际上,我从头开始在 3.0 中创建了新应用程序,然后复制了源代码文件。一切看起来都很棒,但是当我尝试在 Visual Studio 2019 中运行应用程序时,我得到了异常:

应用程序在 IIS 进程中运行,但未配置为使用 IIS 服务器

这是我的 Program.cs

public static class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
                webBuilder.UseKestrel();
                webBuilder.UseIISIntegration();
                webBuilder.UseStartup<Startup>();
            });
}

错误发生在以下行: CreateHostBuilder(args).Build().Run(); 它在 .NET Core 2.2 中运行良好,但它不想作为 3.0 运行。我找不到其他应该做的事情。 Startup.cs 中有什么新东西?我不知道。

【问题讨论】:

标签: asp.net-core-3.0


【解决方案1】:

我在关注文档https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio时也遇到了这个问题

对于你的情况,我已经检查过了,下面的代码可以工作,对webBuilder.UseKestrel()的调用被删除了。

public static IHostBuilder CreateHostBuilder(string[] args) =>
       Host.CreateDefaultBuilder(args)
           .ConfigureWebHostDefaults(webBuilder =>
           {
               webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
               webBuilder.UseIISIntegration();
               webBuilder.UseStartup<Startup>();
           });

【讨论】:

  • 是的,忽略 UseKestrel() 就可以了。非常感谢!
  • 顺便说一句,它有效,因为ConfigureWebHostDefaults 在内部同时执行:UseKestrelUseIIS。这些方法将IServer 绑定到 Kestrel 或 IIS。 ServiceProvider 以“最后胜利”的方式工作。所以,如果你写 UseKestrel - 它是最后一个,如果你不写 UseIIS 是最后一个。
  • 另外,UseIISIntegrationConfigureWebHostDefaults 内部也被调用。
  • 是否可以创建一个同时兼容 IIS 和 Kestrel 的“二进制文件”?很可惜,就因为这两行代码,创建了不同的部署……
  • 这个答案对我有用。谢谢!
【解决方案2】:

我遇到了同样的错误,然后为了解决我的问题,我需要将 webBuilder.UseKestrel(); 更改为 ConfigureKestrel(serverOptions =&gt; {})

我之前的Program.cs

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseKestrel();
            webBuilder.UseStartup<Startup>();
        });

我的Program.cs 固定:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.ConfigureKestrel(serverOptions =>
            {
            })
            .UseStartup<Startup>();
        });

【讨论】:

    【解决方案3】:

    就我而言,我不小心在 Visual Studio 中运行了错误的配置文件 (IIS Express)。

    【讨论】:

      【解决方案4】:

      正如@flam3 建议的那样,您需要选择具有正确命令的配置文件。

      打开解决方案资源管理器 -> 您的项目名称 -> 属性 -> launchSettings.json 文件。

      key commandName 的值应该是“Project”而不是“IIS Express”

      所以选择名称为 Elsa.Samples.UserRegistration.Web(在我的例子中)的配置文件。见下文。或者您可以尝试在第 19 行将 IISExpress 更改为 Project

      【讨论】:

        【解决方案5】:

        对于 Visual Studio 2019 和 2022

        转到 API 项目属性:调试选项卡 -> 常规 -> 点击“打开调试启动配置文件 UI”

        向下滚动到托管模型并选择“进程外”

        然后,您将能够毫无问题地运行您的应用程序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-20
          • 2020-02-26
          • 1970-01-01
          • 2021-08-26
          • 2018-07-10
          • 2020-10-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多