2014-10-20 3 views
24

В предыдущих версиях ASP.NET многие из нас использовали Web.Debug.config/Web.Release.config файлы trasformations, что будет выглядеть примерно так:Как обрабатывать отладки/релиз конфигурации преобразования в ASP.NET vNext

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(); 

Так Мне интересно, что будет предлагаемым способом обработки config-transofrmation с этим переходом на json?

ответ

20

vNext использует новую систему конфигурации, в которой вы можете читать переменные среды через код. Итак, в этом случае вы должны проверить наличие соответствующей переменной окружения и включить соответствующий код JSON через код.

Например, вы можете создать qa.json и prod.json. Установите переменную среды, например, «ENV», которая указывает на «qa» и «prod» в этих средах. Тогда условно вы можете добавить соответствующий JSON.

Код может выглядеть следующим образом:

1) default.json содержит все ваши вещи по умолчанию.

2) qa.json и prod.json содержат необходимые переопределения.

3) Поскольку qa.json и prod.json приходят позже, они победят. Если есть «SETTING1» в default.json и qa.json, он будет автоматически подобрать «SETTING1» в qa.json

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

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

порядка приоритет заключается в том, что «последний выигрывает», поэтому при таком подходе вы говорите «по умолчанию значения в' default.json', переопределяете это с помощью чего-либо, найденного в переменных среды, и переопределяете это с помощью чего-либо в {envSpecificJson}. " Рекомендуемый подход состоит в том, чтобы переменные среды переопределяли любые значения конфигурации на основе файлов. Шаблон по умолчанию теперь использует: .AddJsonFile («appsettings.json», необязательный: true, reloadOnChange: true) .AddJsonFile ($ «appsettings. {Env.EnvironmentName} .json», необязательный: true, reloadOnChange: true) .AddEnvironmentVariables(); –

3

Хотя предыдущий ответ (ы) предлагает хорошее решение, которое я хотел бы представить альтернативный одно:

код

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

Локальная среда: Здесь у вас есть файл "config.json" со всеми настройками. Он легко редактируется и поддерживается.

Prod environment: При развертывании вы опускаете файл config.json. Поскольку он отсутствует, код будет искать следующий источник в цепочке, который является переменными среды. Таким образом, на вашем локальном компьютере используйте файл конфигурации. Когда на сервере вернитесь к переменным среды.Обратите внимание, что ключи конфигурации должны, очевидно, быть одинаковыми в файле и переменных среды.

+8

вам не нужно опускать 'config.json', если есть переменные среды, это переопределит их в' config.json', и это рекомендуемый рабочий процесс для таких вещей, как строка подключения. –

2

По умолчанию ASP.NET проверяет переменную среды с именем «ASPNET_ENV» для установки переменной среды среды IHostingEnvironment.

Соответствующий код можно увидеть здесь:

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"); 
} 
Смежные вопросы