Место общения программистов C#
Anonymous
Изменение поведения настроек Microsoft.Extensions.Configuration по умолчанию при использовании PublishAOT.
Сообщение
Anonymous » 25 май 2024, 00:54
Почему при использовании PublishAOT значение по умолчанию value-type для типизированного класса конфигурации становится нулевым?
Пример:
Код: Выделить всё
var builder = WebApplication.CreateBuilder(args);
// Not neccessary for repro, but to reduce confounding variables
builder.Configuration.Sources.Clear();
builder.Configuration.AddInMemoryCollection(new Dictionary()
{
["String1"] = "Override1",
});
var config = builder.Configuration.Get();
Console.WriteLine($"String1: {config?.String1}");
Console.WriteLine($"String2: {config?.String2}");
Console.WriteLine($"Int3: {config?.Int3}");
Console.WriteLine($"Bool4: {config?.Bool4}");
class TypedConfig
{
public string String1 { get; set; } = "Value1";
public string String2 { get; set; } = "Value2";
public int Int3 { get; set; } = 443;
public bool Bool4 { get; set; } = true;
}
Вывод при сборке с помощью dotnet build:
String1: Override1
String2: Value2
Int3: 443
Bool4: True
Вывод при построении с помощью dotnet опубликовать -c Выпустить -r win-x64 -p:PublishAot=true с использованием .Net 8.0.300:
String1: Override1
String2: Value2
Int3:
0
Bool4:
False
Подробнее здесь:
https://stackoverflow.com/questions/785 ... n-using-pu
1716587656
Anonymous
Почему при использовании PublishAOT значение по умолчанию value-type для типизированного класса конфигурации становится нулевым? Пример: [code]var builder = WebApplication.CreateBuilder(args); // Not neccessary for repro, but to reduce confounding variables builder.Configuration.Sources.Clear(); builder.Configuration.AddInMemoryCollection(new Dictionary() { ["String1"] = "Override1", }); var config = builder.Configuration.Get(); Console.WriteLine($"String1: {config?.String1}"); Console.WriteLine($"String2: {config?.String2}"); Console.WriteLine($"Int3: {config?.Int3}"); Console.WriteLine($"Bool4: {config?.Bool4}"); class TypedConfig { public string String1 { get; set; } = "Value1"; public string String2 { get; set; } = "Value2"; public int Int3 { get; set; } = 443; public bool Bool4 { get; set; } = true; } [/code] Вывод при сборке с помощью dotnet build: String1: Override1 String2: Value2 Int3: 443 Bool4: True Вывод при построении с помощью dotnet опубликовать -c Выпустить -r win-x64 -p:PublishAot=true с использованием .Net 8.0.300: String1: Override1 String2: Value2 Int3: [b]0[/b] Bool4: [b]False[/b] Подробнее здесь: [url]https://stackoverflow.com/questions/78530829/change-in-behavior-of-microsoft-extensions-configuration-defaults-when-using-pu[/url]