Webjob没有使用appsettings.env.json。

问题描述 投票:0回答:1

.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?

azure azure-webjobs azure-webjobssdk
1个回答
0
投票

你可以用额外的选项来扩展现有的配置,确保你有正确的配置。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();
    }
}

完整的示例项目: https:/github.comLXBdevWebJob-netcore-sample

© www.soinside.com 2019 - 2024. All rights reserved.