My migration experience from ASP.NET Core 2.2 to 3.1, part 2: Changes in Program.cs
- My migration experience from ASP.NET Core 2.2 to 3.1, part 1: Introduction
- My migration experience from ASP.NET Core 2.2 to 3.1, part 2: Changes in Program.cs
- My migration experience from ASP.NET Core 2.2 to 3.1, part 3: Changes in Startup.cs
- My migration experience from ASP.NET Core 2.2 to 3.1, part 4: Changes in the rest of the application
My personal experience in practice
My personal experience did not particularly traumatize me, on the contrary, it was rather simple.
If you have been following me for a long time, you will recognize the examples that I have been using for a while, my GitHub repository implementing the essential features of an ASP.NET Core WebAPI.
Changes in Program.cs
Even if it’s not new thing, (because it’s already existing in ASP.NET Core 2.1 and 2.2), ASP.NET Core 3.0 and 3.1 applications build and run by default a IHost interface from a IHostBuilder instead of building and running a IWebHost from a IWebHostBuilder.
The difference is mainly on the performance, better with IHost.
IHost belongs to the package Microsoft.Extensions.Hosting while IWebHostBuilder belongs to Microsoft.AspNetCore.Hosting package.
IWebHostBuilder is still accessible for configuring your WebAPI by using the method ConfigureWebHostDefaults. So it causes changes to the program.cs structure, but not that much.
UseKestrel method is now required to specify which server type is used for the application, and it has to be added on the IWebHostBuilder parameter in ConfigureWebHostDefaults method, same for UseSerilog method and UseStartup method.
ConfigureAppConfiguration method doesn’t change at all.
Because I use Serilog, I needed to add ConfigureLogging method on my IHostBuilder and add Serilog on, before I was able to configure Serilog in Startup.cs by configuring ILoggerFactory by adding Serilog on, but this factory is no longer available in Startup.cs with ASP.NET Core 3+.
Here is what my Program.cs looks after my migration:
And before (ASP.NET Core 2.2)
Conclusion
It was not a real big deal to update my Program.cs. To be honest that change is not mandatory (IWebHostBuilder to IHostBuilder) but above all I wanted to reduce the legacy code by following Microsoft’s recommendations.