如何在ASP.NET vNext中处理调试/发布配置转换

时间:2014-10-20 14:48:12

标签: asp.net web-config config release asp.net-core

在以前的ASP.NET版本中,我们很多人使用Web.Debug.config / Web.Release.config个文件转换,看起来像这样:

的Web.config

<connectionStrings>
  <add name="AppDB" connectionString="Data Source=(LocalDb)\\..." />
</connectionStrings>

Web.Release.config

<connectionStrings>
  <add name="AppDB" connectionString="Data Source=(ReleaseDb)\\..."  xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>

根据ASP.NET vNext tutorial,您仍然可以使用Web.config。但config.json似乎是现在按照同一篇文章处理配置的新方法:

config.json

{
    "Data": {
        "DefaultConnection": { 
            "ConnectionString": "Server=(localdb)\\..."
        }
    }
}

Startup.cs

var configuration = new Configuration();
configuration.AddJsonFile("config.json");
configuration.AddEnvironmentVariables();

所以我想知道通过这种转换到json来处理配置转换的建议方法是什么?

3 个答案:

答案 0 :(得分:20)

vNext使用新的配置系统,您可以通过代码读取环境变量。因此,在这种情况下,您将检查是否存在相应的环境变量,并通过代码包含相应的JSON。

例如,您可以创建qa.json和prod.json。设置一个环境变量,例如,&#34; ENV&#34;指向&#34; qa&#34;和&#34; prod&#34;在那些相应的环境中。然后有条件地你可以添加适当的JSON。

代码可能如下所示:

1)default.json包含所有默认内容。

2)qa.json和prod.json包含必要的覆盖。

3)由于qa.json和prod.json以后会来,他们会赢。如果有&#34;设置1&#34;在default.json和qa.json中,它会自动选择&#34; setting1&#34;在qa.json

 var configuration = new Configuration()
                     .AddJsonFile("default.json")
                     .AddEnvironmentVariables(); 

 var envSpecificJson = configuration.Get("ENV") + ".json";
 configuration.AddJsonFile(envSpecificJson);

答案 1 :(得分:4)

虽然之前的答案提供了一个很好的解决方案,但我想提出另一个答案:

<强>代码

var configuration = new Configuration()
                     .AddJsonFile("config.json")
                     .AddEnvironmentVariables();

本地环境: 这里有“config.json”文件,包含所有设置。它易于编辑和维护。

产品环境: 部署时省略“config.json”文件。由于缺少,代码将查找链中的下一个源,即环境变量。因此,在本地计算机上时,请使用配置文件。在服务器上时,回退到环境变量。请注意,配置键显然必须在文件和环境变量中命名相同。

答案 2 :(得分:2)

默认情况下,ASP.NET将检查名为&#34; ASPNET_ENV&#34;的环境变量。设置IHostingEnvironment的EnvironmentName变量。

相关代码可以在这里看到:

https://github.com/aspnet/Hosting/blob/77e2dc263f11655312d4c73bb8e22d7b6254d485/src/Microsoft.AspNet.Hosting/HostingFactory.cs

如果您在各种环境中的服务器上更改ASPNET_ENV的值,则可以执行以下操作:

var configuration = new Configuration()
            .AddJsonFile("config.json")
            .AddEnvironmentVariables();
if (string.Equals(env.EnvironmentName, "Prod", StringComparison.OrdinalIgnoreCase))
{
            configuration.AddJsonFile("prod.config.json");
}