.net core 升级到WebJobs SDK 3.0已破坏appsettings中的重写配置
我将一个WebJobs项目迁移到3.0,遇到了一个特殊的问题。我的项目有一个appsettings.json和各种appsettings.environment.json文件 在任何环境下运行时,都会发生相反的情况,而不是环境设置覆盖基本设置:如果基本设置和环境设置中存在任何设置,则使用基本设置 我尝试过使用.net core 升级到WebJobs SDK 3.0已破坏appsettings中的重写配置,.net-core,azure-webjobs,azure-webjobssdk,.net Core,Azure Webjobs,Azure Webjobssdk,我将一个WebJobs项目迁移到3.0,遇到了一个特殊的问题。我的项目有一个appsettings.json和各种appsettings.environment.json文件 在任何环境下运行时,都会发生相反的情况,而不是环境设置覆盖基本设置:如果基本设置和环境设置中存在任何设置,则使用基本设置 我尝试过使用HostBuilder.ConfigureAppConfiguration()和HostBuilder.ConfigureHostConfiguration()的各种变体,在每种情况下,当我
HostBuilder.ConfigureAppConfiguration()
和HostBuilder.ConfigureHostConfiguration()
的各种变体,在每种情况下,当我查看hostInstance.Configuration.Providers
时,我都会注意到一些特殊的情况:总是有三个JsonConfigurationProvider
,配置主机时使用两个内部ChainedConfigurationProvider
,或者使用应用程序时仅作为主提供程序阵列的一部分。第一个实例始终是我的基础,第二个实例始终是环境,第三个实例始终是基础
所以我认为我的问题是第三个JSONConfiguration提供程序正在添加,但我不知道它是如何添加的
以下是我的WebJob中的相关代码:
var envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")
?? Environment.GetEnvironmentVariable("ENV")
?? "development";
var builder = new HostBuilder()
.UseEnvironment(envName)
.ConfigureAppConfiguration(b =>
{
b.SetBasePath(Environment.CurrentDirectory)
.AddCommandLine(args, StartupSettings.SwitchMapping)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{envName}.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
});
builder.ConfigureWebJobs((context, b) =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage();
b.AddTimers();
});
builder.ConfigureLogging((context, b) =>
{
if (false && context.HostingEnvironment.IsDevelopment())
{
b.SetMinimumLevel(LogLevel.Debug);
}
else
{
b.SetMinimumLevel(LogLevel.Information);
b.AddFilter("Microsoft.EntityFrameworkCore.Database.Command", LogLevel.Warning);
}
b.AddConsole();
var applicationInsightsKey = context.Configuration.GetValue<string>("ApplicationInsights:InstrumentationKey");
b.AddApplicationInsights(o => o.InstrumentationKey = applicationInsightsKey);
})
.UseConsoleLifetime();
builder.ConfigureServices((context, services) =>
{
/*...*/
});
return builder.Build();
var envName=Environment.GetEnvironmentVariable(“ASPNETCORE\u环境”)
?? Environment.GetEnvironmentVariable(“ENV”)
?? “发展”;
var builder=新主机生成器()
.UseEnvironment(envName)
.ConfigureAppConfiguration(b=>
{
b、 SetBasePath(Environment.CurrentDirectory)
.AddCommandLine(参数、StartupSettings.SwitchMapping)
.AddJsonFile(“appsettings.json”,可选:false,reloadOnChange:true)
.AddJsonFile($“appsettings.{envName}.json”,可选:false,重载更改:true)
.AddenEnvironmentVariables();
});
builder.ConfigureWebJobs((上下文,b)=>
{
b、 AddAzureStorageCoreServices();
b、 AddAzureStorage();
b、 AddTimers();
});
builder.ConfigureLogging((上下文,b)=>
{
if(false&&context.HostingEnvironment.IsDevelopment())
{
b、 SetMinimumLevel(LogLevel.Debug);
}
其他的
{
b、 SetMinimumLevel(日志级别信息);
b、 AddFilter(“Microsoft.EntityFrameworkCore.Database.Command”,LogLevel.Warning);
}
b、 AddConsole();
var applicationInsightsKey=context.Configuration.GetValue(“ApplicationInsights:InstrumentationKey”);
b、 添加ApplicationInsights(o=>o.InstrumentationKey=applicationInsightsKey);
})
.UseConsoleLifetime();
builder.ConfigureServices((上下文,服务)=>
{
/*...*/
});
返回builder.Build();
刚刚想好了
ConfigureWebJobs()
的扩展方法调用ConfigureAppConfiguration()
并自动添加appsettings。因为我是在调用ConfigureAppConfiguration()
之后调用它的,所以最后一个appsettings.json是基本的appsettings.json
代码来源:
最糟糕的是,这些似乎是多余的
builder.ConfigureAppConfiguration(config =>
{
config.AddJsonFile("appsettings.json", optional: true);
config.AddEnvironmentVariables();
});