在升级到.Net Core 2.1后,IWebHost.Build()没有调用Startup.Configure()。

5

我已经在.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。
也许有人知道可能发生了什么变化或者我可以调查什么?

看看 Startup 类 是否有帮助。 - Mark G
你能在输出窗口看到任何东西吗?也许你应该同时发布你的启动类。 - MUG4N
2个回答

4
自.Net Core 2.0以来,启动顺序已经改变。我没有找到任何文件或GitHub上的讨论来证实这一点,但我的测试结果是很清楚的。
过去Startup.ConfigureWebHostBuilder.Build()调用,但现在这个调用被延迟到WebHost.Run()[或者WebHost.Start()如果你在使用它]。
我设法通过注入IApplicationLifetime并注册回调来执行数据库迁移等操作。对于值得一提的是,我认为启动序列现在相当复杂,最好有一些更简单的钩子来在必要的时候运行代码。
感谢所有评论或提供建议的人。

哇塞,谢谢!我正为这个问题苦恼(从2.0 => 2.2)。微软在小版本中进行重大更改真是太棒了... 值得注意的是,IApplicationLifetime已被弃用,推荐使用IHostApplicationLifetime。 https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.iapplicationlifetime?view=aspnetcore-2.2 - nover
似乎ConfigureAppConfiguration会在Web主机构建器中替代Startup(正如文档中所示)。因此,我已将LoadAppConfiguration调用移至Startup.Startup中,其中创建了ConfigurationBuilder。这是可能的,因为我没有使用context - oleksa

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接