我正在尝试通过带有连接设置对象的 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 中?
假设您正在使用 .net-8.0 或可以升级到它:
.NET 8 引入了一个源生成器,以在 ASP.NET Core 中提供 AOT 和修剪友好的配置。该生成器是现有的基于反射的实现的替代方案。
它在 AOT 编译的 Web 应用程序中默认启用,并且当 PublishTrimmed 设置为 true 时(.NET 8+ 应用程序)。对于其他项目类型,源生成器默认处于关闭状态,但您可以通过在项目文件中将
属性设置为 true 来选择启用EnableConfigurationBindingGenerator
因此,将以下内容添加到您的 csproj 文件中:
<PropertyGroup>
<EnableConfigurationBindingGenerator>true</EnableConfigurationBindingGenerator>
</PropertyGroup>