.NET核心中的环境变量配置



我在我的API中使用.NET Core 1.1,并且正在努力解决问题:

  1. 我需要有两个级别的配置:appsettings.json和环境变量。
  2. 我想通过IOptions使用DI进行配置。
  3. 我需要环境变量来覆盖appsettings.json值。

所以我到目前为止这样做:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddEnvironmentVariables();
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
     // Something here
     services.Configure<ConnectionConfiguration>(options =>
            Configuration.GetSection("ConnectionStrings").Bind(options));
     // Something there
}

用我的 appsettings.json像这样

{
    "ConnectionStrings": {
        "ElasticSearchUrl": "http://localhost:4200",
        "ElasticSearchIndexName": "myindex",
        "PgSqlConnectionString": "blablabla"
    }
}

我将所有配置映射到我的类ConnectionConfiguration.cs。但是我也无法将环境变量映射。我尝试了以下名称:ConnectionStrings:ElasticSearchUrlElasticSearchUrl,甚至尝试在没有任何结果的情况下指定.AddEnvironmentVariables("ConnectionStrings")的前缀。

我应该如何将环境变量命名,以便可以用services.Configure<TConfiguration>()映射?

:分离器与所有平台上的环境变量层次键无法使用。__,双重下划线,由所有平台支持,并由:

自动替换

尝试将环境变量命名,例如ConnectionStrings__ElasticSearchUrl

在IIS

中的环境变量中查看ASP.NET核心配置

要使用环境变量进行相同的操作,您只需将级别与结肠分开(:),例如 HitchhikersGuideToTheGalaxy:MeaningOfLife

在您的情况下,您将使用问题中提到的ConnectionStrings:ElasticSearchUrl

还注意以下内容:

当您部署到IIS时,事情会变得更加棘手,不幸的是,缺少有关与IIS使用配置的文档。您进入服务器的系统设置并配置所有环境变量。然后,您将应用程序部署到IIS,然后...爆炸,因为它缺少这些必要的设置。

事实证明,为了将环境变量与IIS一起使用,您需要编辑应用程序池的高级设置。在那里,您会找到一个设置,称为"加载用户配置文件" 。将其设置为 true 。然后,回收应用程序池以加载在环境变量中。注意:即使您的环境变量添加为"系统变量",您也必须执行此操作。

我相信您正在寻找:

var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        this.Configuration = builder.Build();

我有3个配置

  1. Dev-Final
  2. Dev-Local
  3. dev-test

和4 *.json文件

  • appsettings.json
  • appsettnigs.dev-final.json
  • appsettings.dev-local.json
  • appsettings.dev-test.json

appsettings.json保留全局配置值,而其他文件则具有特定文件。

最新更新