为什么强类型配置不能与 AOT 一起使用

问题描述 投票:0回答:1

我正在尝试通过带有连接设置对象的 appsettings.json 将配置添加到我的控制台应用程序

public class ConnectionSettings
{
    public string IP { get; set; } = string.Empty;
    public string Port { get; set; } = string.Empty;
    public string Username { get; set; } = string.Empty;
    public string Password { get; set; } = string.Empty; 
}

和我的应用程序:

var builder = Host.CreateApplicationBuilder(args);

builder.Services.Configure<ConnectionSettings>(builder.Configuration.GetSection(nameof(ConnectionSettings)));
builder.Services.AddHostedService<Executer>();

var app = builder.Build();
app.Run();

这在不使用 AOT 的情况下工作正常,但在启用 AOT 的情况下,我会收到有关运行时代码生成的警告,而 AOT 无法执行此操作。

那么有没有办法可以在使用 AOT 时将这种配置添加到我的 DI 中?

c# .net configuration aot
1个回答
0
投票

假设您正在使用 或可以升级到它:

根据 .NET 8 运行时的新增功能:配置绑定源生成器

.NET 8 引入了一个源生成器,以在 ASP.NET Core 中提供 AOT 和修剪友好的配置。该生成器是现有的基于反射的实现的替代方案。

它在 AOT 编译的 Web 应用程序中默认启用,并且当 PublishTrimmed 设置为 true 时(.NET 8+ 应用程序)。对于其他项目类型,源生成器默认处于关闭状态,但您可以通过在项目文件中将

EnableConfigurationBindingGenerator
属性设置为 true 来选择启用

因此,将以下内容添加到您的 csproj 文件中:

<PropertyGroup>
    <EnableConfigurationBindingGenerator>true</EnableConfigurationBindingGenerator>
</PropertyGroup>
© www.soinside.com 2019 - 2024. All rights reserved.