-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Closed
Labels
Priority:0Work that we can't release withoutWork that we can't release withoutarea-Extensions-Configurationblocking-releasesource-generatorIndicates an issue with a source generator featureIndicates an issue with a source generator feature
Milestone
Description
Description
When an Options object uses the StringValues type, the ConfigurationBinder Source Generator is generating code that doesn't compile.
Reproduction Steps
Build the following app:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<EnableConfigurationBindingGenerator>true</EnableConfigurationBindingGenerator>
<PublishAot>true</PublishAot>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.0-dev" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.0-dev" />
</ItemGroup>
</Project>using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Primitives;
IConfigurationSection c = new ConfigurationBuilder().Build().GetSection("Options");
c.Get<MyOptions>();
public class MyOptions
{
public IDictionary<string, StringValues> DefaultValues { get; set; } = new Dictionary<string, StringValues>(StringComparer.OrdinalIgnoreCase);
}Expected behavior
The project should build successfully.
Actual behavior
The build fails with:
Severity Code Description Project File Line Suppression State Details
Error (active) CS8518 An expression of type 'StringValues' can never match the provided pattern. ConsoleApp101 C:\Users\eerhardt\source\repos\ConsoleApp101\ConsoleApp101\Microsoft.Extensions.Configuration.Binder.SourceGeneration\Microsoft.Extensions.Configuration.Binder.SourceGeneration.ConfigurationBindingGenerator\BindingExtensions.g.cs 68
The generated code that fails looks like:
public static void BindCore(IConfiguration configuration, ref global::Microsoft.Extensions.Primitives.StringValues instance, bool defaultValueIfNotFound, BinderOptions? binderOptions)
{
if (instance is not ICollection<string> temp) // this line has the build error
{
return;
}Regression?
No
Known Workarounds
No response
Configuration
No response
Other information
No response
Metadata
Metadata
Assignees
Labels
Priority:0Work that we can't release withoutWork that we can't release withoutarea-Extensions-Configurationblocking-releasesource-generatorIndicates an issue with a source generator featureIndicates an issue with a source generator feature