如何仅在 .NET 6 Program.cs 中添加配置?
How to add configuration in .NET 6 Program.cs only?
在 AspNetCore 5 Web 和 API 项目中,我在程序文件中有以下内容:
public class Program {
private static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("settings.json", false, true)
.AddJsonFile($"settings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", false, true)
.AddEnvironmentVariables()
.Build();
public static Int32 Main(String[] args) {
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(String[] args) {
IHostBuilder builder = Host.CreateDefaultBuilder(args);
builder
.UseSerilog()
.ConfigureWebHostDefaults(builder => {
builder
.UseConfiguration(Configuration)
.UseStartup<Startup>();
});
return builder;
}
}
现在我使用 Program.cs
将此代码移动到 NET 6 而没有 Startup.cs
:
WebApplicationBuilder builder = WebApplication.CreateBuilder();
builder.Configuration
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("settings.json", false, true)
.AddJsonFile($"settings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", false, true)
.AddEnvironmentVariables();
builder.Host.UseSerilog();
builder.Host.ConfigureWebHostDefaults(x => {
x.UseSerilog(); / ??
x.UseConfiguration(??); // ??
x.UseWebRoot("webroot");
});
await using WebApplication application = builder.Build();
问题
我可以在 builder.Configuration
中设置配置还是应该在 ConfigureWebHostDefaults 中设置?
我应该使用 builder.Host.UserSerilog
还是在 ConfigureWebHostDefaults
中添加 Serilog?
这有点令人困惑,因为我可以用不同的方式做事。
new hosting model 使用 WebApplicationBuilder
配置 web-host 默认值,所以你不需要自己调用它。
Can I set configuration in builder.Configuration
or should I do it inside ConfigureWebHostDefaults
?
使用 builder.Configuration
执行此操作。
Should I use builder.Host.UserSerilog
or add Serilog in ConfigureWebHostDefaults
?
使用 builder.Host
执行此操作。 Nicholas Blumhardt 在 Setting up Serilog in .NET 6.
中证明了这一点
It's a bit confusing because I can do things in different ways.
强烈需要向后兼容,尤其是 .NET 6 应用程序不需要使用新的托管模型。这导致您可以使用几种不同的方法。我希望这会随着未来的版本而改变,但这只是我的猜测。
1.我可以在 builder.Configuration
中设置配置还是应该在 ConfigureWebHostDefaults
中设置?
要管理配置,您应该使用由 builder.Configuration
:
公开的 ConfigurationManager
builder.Configuration
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("settings.json", false, true)
.AddJsonFile($"settings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", false, true)
.AddEnvironmentVariables();
2。我应该使用 builder.Host.UserSerilog
还是在 ConfigureWebHostDefaults
中添加 Serilog
来自 Nicholas Blumhardt(Serilog 维护者之一)github sample 使用 builder.Host
:
builder.Host.UseSerilog((ctx, lc) => // Serilog setup here, use ctx.Configuration for config);
在 AspNetCore 5 Web 和 API 项目中,我在程序文件中有以下内容:
public class Program {
private static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("settings.json", false, true)
.AddJsonFile($"settings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", false, true)
.AddEnvironmentVariables()
.Build();
public static Int32 Main(String[] args) {
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(String[] args) {
IHostBuilder builder = Host.CreateDefaultBuilder(args);
builder
.UseSerilog()
.ConfigureWebHostDefaults(builder => {
builder
.UseConfiguration(Configuration)
.UseStartup<Startup>();
});
return builder;
}
}
现在我使用 Program.cs
将此代码移动到 NET 6 而没有 Startup.cs
:
WebApplicationBuilder builder = WebApplication.CreateBuilder();
builder.Configuration
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("settings.json", false, true)
.AddJsonFile($"settings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", false, true)
.AddEnvironmentVariables();
builder.Host.UseSerilog();
builder.Host.ConfigureWebHostDefaults(x => {
x.UseSerilog(); / ??
x.UseConfiguration(??); // ??
x.UseWebRoot("webroot");
});
await using WebApplication application = builder.Build();
问题
我可以在
builder.Configuration
中设置配置还是应该在 ConfigureWebHostDefaults 中设置?我应该使用
builder.Host.UserSerilog
还是在ConfigureWebHostDefaults
中添加 Serilog?
这有点令人困惑,因为我可以用不同的方式做事。
new hosting model 使用 WebApplicationBuilder
配置 web-host 默认值,所以你不需要自己调用它。
Can I set configuration in
builder.Configuration
or should I do it insideConfigureWebHostDefaults
?
使用 builder.Configuration
执行此操作。
Should I use
builder.Host.UserSerilog
or add Serilog inConfigureWebHostDefaults
?
使用 builder.Host
执行此操作。 Nicholas Blumhardt 在 Setting up Serilog in .NET 6.
It's a bit confusing because I can do things in different ways.
强烈需要向后兼容,尤其是 .NET 6 应用程序不需要使用新的托管模型。这导致您可以使用几种不同的方法。我希望这会随着未来的版本而改变,但这只是我的猜测。
1.我可以在 builder.Configuration
中设置配置还是应该在 ConfigureWebHostDefaults
中设置?
要管理配置,您应该使用由 builder.Configuration
:
ConfigurationManager
builder.Configuration
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("settings.json", false, true)
.AddJsonFile($"settings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", false, true)
.AddEnvironmentVariables();
2。我应该使用 builder.Host.UserSerilog
还是在 ConfigureWebHostDefaults
Serilog
来自 Nicholas Blumhardt(Serilog 维护者之一)github sample 使用 builder.Host
:
builder.Host.UseSerilog((ctx, lc) => // Serilog setup here, use ctx.Configuration for config);