Mig*_*ura 8 c# asp.net-core asp.net-core-5.0 .net-6.0
在 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;
}
}
Run Code Online (Sandbox Code Playgroud)
Program.cs现在我使用without将此代码移至 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();
Run Code Online (Sandbox Code Playgroud)
问题
我可以在ConfigureWebHostDefaults中设置配置builder.Configuration还是应该在ConfigureWebHostDefaults中进行设置?
我应该使用builder.Host.UserSerilog或添加 SerilogConfigureWebHostDefaults吗?
这有点令人困惑,因为我可以用不同的方式做事。
新的托管模型用于WebApplicationBuilder配置网络主机默认值,因此您无需自己调用它。
我可以在里面设置配置
builder.Configuration还是应该在里面进行配置ConfigureWebHostDefaults?
使用 来执行此操作builder.Configuration。
我应该使用
builder.Host.UserSerilog或添加 SerilogConfigureWebHostDefaults吗?
使用 来执行此操作builder.Host。Nicholas Blumhardt 在《在 .NET 6 中设置 Serilog》中演示了这一点。
这有点令人困惑,因为我可以用不同的方式做事。
强烈需要向后兼容,特别是因为 .NET 6 应用程序不需要使用新的托管模型。这导致您可以使用几种不同的方法。我预计这会随着未来的版本而改变,但这只是我的猜测。
1.我可以在里面设置配置builder.Configuration还是应该在里面进行配置ConfigureWebHostDefaults?
要管理配置,您应该使用ConfigurationManager公开的builder.Configuration:
builder.Configuration
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("settings.json", false, true)
.AddJsonFile($"settings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", false, true)
.AddEnvironmentVariables();
Run Code Online (Sandbox Code Playgroud)
2.我应该使用builder.Host.UserSerilog还是Serilog添加ConfigureWebHostDefaults
来自 Nicholas Blumhardt(Serilog 维护者之一)的github 示例使用builder.Host:
builder.Host.UseSerilog((ctx, lc) => // Serilog setup here, use ctx.Configuration for config);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13560 次 |
| 最近记录: |