【问题标题】:IWebHost.Build() is not calling Startup.Configure() after upgrading to .Net Core 2.1升级到 .Net Core 2.1 后,IWebHost.Build() 未调用 Startup.Configure()
【发布时间】:2021-05-16 18:03:57
【问题描述】:

几个月来,我一直在使用 .Net Core 2.0 开发一个网站。我刚刚升级到 .Net Core 2.1,现在没有调用 Startup.Configure() 方法。

我的Program 类中有以下代码,它创建了IWebHost

    private static IWebHost BuildWebHost(string[] args)
    {
        return WebHost
            .CreateDefaultBuilder()
            .ConfigureAppConfiguration(LoadAppConfiguration)
            .UseStartup<Startup>()
            .Build();
    }

在我升级框架之前,它运行良好,实例化 Startup 并正确调用 ConfigureServicesConfigure 方法。

现在,虽然 Startup 正在被实例化,但 Configure 不再被调用。 (没有抛出异常。)

我意识到在我的应用程序启动中还有很多其他代码。但我唯一做的就是将 .Net Core SDK 从 2.0 更新到 2.1。

也许有人知道可能发生了什么变化或我可以调查什么?

【问题讨论】:

  • 看看The Startup class是否有帮助。
  • 您能在输出窗口中看到任何内容吗?也许你也应该发布你的创业课程

标签: c# asp.net-core .net-core


【解决方案1】:

事实证明,自 .Net Core 2.0 以来,启动顺序发生了变化。我在 GitHub 上没有找到任何文档或讨论来确认这一点,但我自己的测试已经很清楚了。

以前Startup.ConfigureWebHostBuilder.Build() 调用。但是这个调用现在被推迟到WebHost.Run() [或WebHost.Start(),如果你正在使用它]。

我设法通过注入IApplicationLifetime 并注册一个回调来执行我的数据库迁移等来解决它。对于它的价值,我认为现在启动顺序非常复杂,如果有一些更简单的就好了在必要的地方运行代码的钩子。

感谢所有评论或提供建议的人。

【讨论】:

  • 天哪,谢谢!我只是为这个确切的问题而烦恼(尽管从 2.0 => 2.2 开始)。可爱的 MS 如何在次要版本中进行重大更改...值得注意的是,IApplicationLifetime 已被弃用,取而代之的是 IHostApplicationLifetimedocs.microsoft.com/en-us/dotnet/api/…
  • 似乎 ConfigureAppConfiguration 替换 Startup 如果在 web 主机构建器中使用(因为它在 doc 中使用)。因此,我将 LoadAppConfiguration 调用移至 Startup.Startup 并创建了 ConfigurationBuilder。这是可能的,因为我没有使用context
【解决方案2】:

对我来说,答案是重新启动 Visual Studio。

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多