.NET Core 2.2, WebJobs SDK 3.0。
我有一个webjob,我是这样配置的。
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Development";
HostBuilder builder = new HostBuilder();
builder.ConfigureAppConfiguration((context, configApp) => {
configApp.AddEnvironmentVariables();
configApp.AddJsonFile("appsettings.json", optional: true);
configApp.AddJsonFile($"appsettings.{environmentName}.json",optional: false);
});
builder.ConfigureHostConfiguration((configApp) => {
configApp.AddEnvironmentVariables();
configApp.AddJsonFile("appsettings.json", optional: true);
configApp.AddJsonFile($"appsettings.{environmentName}.json", optional: false);
});
我有一个 appsettings.test.json
文件部署到我的环境中,当我检查我的环境变量时,我确实有了 test
作为环境。
我可以看到文件被加载了,因为optional是false,我没有任何异常。
然而,当我的webjob启动时,它没有使用我在appsettings.test.json中的存储连接字符串,而是使用了appsettings.json中的字符串
我的AppInsights连接也不工作,我像这样初始化它。
builder.ConfigureLogging((context, b) => {
b.AddConfiguration(context.Configuration.GetSection("Logging"));
Console.WriteLine($"App Insight key is {context.Configuration["ApplicationInsights:InstrumentationKey"]}");
b.AddApplicationInsightsWebJobs(o => o.InstrumentationKey = context.Configuration["ApplicationInsights:InstrumentationKey"]);
});
当代码运行时,控制台显示的是appsettings.json中的App Insights Key,而不是appsettings.test.json。
我怎么做才能强制主机使用我的appsettings.test.json?
你可以用额外的选项来扩展现有的配置,确保你有正确的配置。DOTNET_ENVIRONMENT
设置为环境变量。
async static Task Main(string[] args)
{
var builder = Host.CreateDefaultBuilder(args);
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage();
b.AddTimers();
});
builder.ConfigureServices(services =>
{
services.AddScoped<Functions>();
});
builder.ConfigureAppConfiguration((context, configurationBuilder) =>
{
configurationBuilder
.AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: false)
.AddEnvironmentVariables(); // I prefer environment variables to "override" appsetting files
});
IHost host = builder.Build();
using (host)
{
await host.RunAsync();
}
}
如果你还没有使用.net core 3.x,你也可以这样做。
```csharp
async static Task Main(string[] args)
{
var builder = Host.CreateDefaultBuilder(args);
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage();
b.AddTimers();
});
builder.ConfigureServices(services =>
{
services.AddScoped<Functions>();
});
builder.ConfigureAppConfiguration((context, configurationBuilder) =>
{
configurationBuilder
.AddJsonFile("appsettings.json", optional: false)
.AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: false)
.AddEnvironmentVariables(); // I prefer environment variables to "override" appsetting files
});
IHost host = builder.Build();
using (host)
{
await host.RunAsync();
}
}