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

Ond*_*sky 7 asp.net-core-3.0

我已经将应用程序从.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>();
            });
}
Run Code Online (Sandbox Code Playgroud)

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

fla*_*am3 20

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

在此处输入图片说明


Rod*_*una 19

我有同样的错误然后解决我需要更改webBuilder.UseKestrel();为的问题ConfigureKestrel(serverOptions => {})

Program.cs以前:

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

我的Program.cs固定:

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


Dav*_*tro 8

对于 Visual Studio 2019 和 2022

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

在此输入图像描述

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

在此输入图像描述

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


Sat*_*jit 7

在遵循文档https://docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio的同时,我也遇到了此问题

对于下面的情况,您可以使用,我已经检查了

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

  • 顺便说一句,它是有效的,因为“ConfigureWebHostDefaults”在内部执行了“UseKestrel”和“UseIIS”这两项操作。这些方法将“IServer”绑定到 Kestrel 或 IIS。ServiceProvider 以“最后获胜”的方式工作。因此,如果您编写 `UseKestrel` - 它是最后一个,如果您省略它,`UseIIS` 就是最后一个。 (13认同)
  • 是的,省去UseKestrel()可以完成这项工作。非常感谢! (5认同)
  • 是否可以创建一个与 IIS 和 Kestrel 兼容的“二进制文件”?仅仅因为这两行代码就创建不同的部署,这将是遗憾的...... (4认同)
  • 另外,“UseIISIntegration”也在“ConfigureWebHostDefaults”内部调用。 (3认同)

Viv*_*Dev 7

正如@flam3 建议的那样,您需要使用正确的命令选择一个配置文件。

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

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

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

启动配置文件