runtime: Updating to latest VS `17.1.1` and SDK `6.0.201` breaks web application builder

Description

My application stopped working after updating to lastest VS 17.1.1 and SDK 6.0.201.

Related - PR #62209, issue #61747

Unhandled exception: System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'ConfigurationManager'.
   at Microsoft.Extensions.Configuration.ReferenceCountedProviderManager.AddProvider(IConfigurationProvider provider)
   at Microsoft.Extensions.Configuration.ConfigurationManager.AddSource(IConfigurationSource source)
   at Microsoft.Extensions.Configuration.ConfigurationManager.Microsoft.Extensions.Configuration.IConfigurationBuilder.Add(IConfigurationSource source)
   at Microsoft.AspNetCore.Builder.WebApplicationBuilder.<>c__DisplayClass25_0.<Build>b__2(HostBuilderContext context, IServiceCollection services)
   at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()
   at Microsoft.Extensions.Hosting.HostBuilder.Build()
   at Microsoft.AspNetCore.Builder.WebApplicationBuilder.Build()

Reproduction Steps

Expected behavior

Not throw ObjectDisposedException exception.

Actual behavior

Throws ObjectDisposedException exception.

Regression?

No response

Known Workarounds

No response

Configuration

No response

Other information

No response

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 20 (7 by maintainers)

Most upvoted comments

This will be fixed in 6.0.4, you’ll need to wait another week or so.

As a workaround, using mcr.microsoft.com/dotnet/aspnet:6.0.2 image and Microsoft.Extensions.Configuration version 6.0.0 nuget package seems to work.

To reproduce the issue:

  1. Create a new template webapi project
  2. Add Microsoft.Extensions.Configuration nuget package to the project:
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
  1. Create an extension class:
public static class ConfigurationExtension
{
    public static TModel GetConfiguration<TModel>(this IServiceCollection services, string settingsSectionName)
        where TModel : new()
    {
        using var serviceProvider = services.BuildServiceProvider();
        var configuration = serviceProvider.GetService<IConfiguration>();
        var model = new TModel();
        if (configuration == null) return model;
        configuration.GetSection(settingsSectionName).Bind(model);
        return model;
    }
}
  1. Execute the extension method:
builder.Services.GetConfiguration<WeatherForecast>("");