在以前版本的ASP.NET中,我们中许多人使用Web.Debug.config / Web.Release.config文件trasformations,看起来像这样:
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的建议的方式来处理config-transofrmation?
解决方法
vNext使用一个新的配置系统,您可以通过代码读取环境变量。因此,在这种情况下,您将检查是否存在适当的环境变量,并通过代码包含相应的JSON。
例如,您可以创建一个qa.json和prod.json。设置一个环境变量,例如在这些环境中指向“qa”和“prod”的“ENV”。然后有条件地添加适当的JSON。
代码可能如下所示:
1)default.json包含所有默认的东西。
2)qa.json和prod.json包含必要的覆盖。
3)由于qa.json和prod.json来了,他们会赢了。如果在default.json和qa.json中有一个“setting1”,它会自动在qa.json中拿起“setting1”
- var configuration = new Configuration()
- .AddJsonFile("default.json")
- .AddEnvironmentVariables();
- var envSpecificJson = configuration.Get("ENV") + ".json";
- configuration.AddJsonFile(envSpecificJson);