在以前的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来处理配置转换的建议方法是什么?
答案 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变量。
相关代码可以在这里看到:
如果您在各种环境中的服务器上更改ASPNET_ENV的值,则可以执行以下操作:
var configuration = new Configuration()
.AddJsonFile("config.json")
.AddEnvironmentVariables();
if (string.Equals(env.EnvironmentName, "Prod", StringComparison.OrdinalIgnoreCase))
{
configuration.AddJsonFile("prod.config.json");
}