Фон
Во многих случаях нам нужно иметь два разных набора параметров конфигурации (скажем, один для среды разработки и другой для производственной среды). Обычно мы меняем настройки по одному перед развертыванием на рабочем сервере и снова возвращаем их в разработку. Это очень раздражает, особенно когда у вас много настроек.
Преобразование Web.config — это замечательный метод преобразования исходного web.config в другой с немного измененными настройками.
Вы можете найти более подробную информацию о том, как настроить и использовать его здесь, в общем проекте ASP.NET.
Преобразование App.Config с некоторыми хитростями
Плохая новость заключается в том, что этот метод встроен только для web.config для веб-проекта ASP.NET, а не для других, таких как Windows Form, Console App и т. Д.!
Хорошая новость в том, что мы можем сделать какую-то хитрость, чтобы она работала Идея состоит в том, чтобы внести некоторые изменения в файл проекта, как показано в этом посте .
Преобразование конфигурации в Windows Azure
Начиная с SDK 1.5 (если я правильно помню), VS Tools для Windows Azure позволяет нам выбирать конфигурацию сервиса и конфигурацию сборки.
Конфигурация службы — это, по сути, конфигурация для служб Windows Azure. Вы можете иметь две или более разных конфигураций, скажем, одну для локальной ( ServiceConfiguration.Local.cscfg ) и другую для облачной среды ( ServiceConfiguration.Cloud.cscfg ).
Конфигурация сборки — это либо ваш web.config (для веб-роли), либо app.config (для рабочей роли). Допустим, один для отладки ( Web.Debug.config ), а другой для выпуска ( Web.Release.config ).
App.Config в рабочей роли Windows Azure
Для web.config это, безусловно, работает хорошо. К сожалению, он не применим для app.config (проект Worker Role) . Хотя если вы попытаетесь применить вышеописанную технику к вашему App.config внутри вашей рабочей роли, она все равно не будет работать.
Вот почему я пишу эту статью .
Использование SlowCheetah — XML Transforms
Идея заключается в использовании дополнения Visual Studio SlowCheetah — XML Transforms, чтобы помочь нам выполнить XML-преобразование. Это потрясающие инструменты (не только для проекта Windows Azure), которые могут помочь нам добавить и просмотреть применимые в конфигурации. Спасибо JianBo за рекомендацию мне этот инструмент!
Как?
Посмотрим, как это будет сделано…
1. Загрузите и установите SlowCheetah — XML Transforms . Вам может потребоваться перезагрузить Visual Studio после установки.
2. Подготовьте проект рабочей роли Windows Azure. Я назвал свой проект Windows Azure: WindowsAzureWorkerConfigDemo и мою рабочую роль: WorkerRole1 .
3. Откройте файл app.config и добавьте следующее значение:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="setting1" value="original"/> </appSettings> <system.diagnostics> <trace> <listeners> <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics"> <filter type="" /> </add> </listeners> </trace> </system.diagnostics> </configuration>
Не забудьте сохранить файл после добавления этого значения.
4. Щелкните правой кнопкой мыши app.config и выберите Добавить преобразование . (Это меню «Добавить преобразование» появится, только если вы успешно установили SlowCheetah). Если Visual Studio предложит добавить импорт проекта преобразования, нажмите «Да», чтобы продолжить.
5. Затем вы увидите дочерний файл ( app.Debug.config и app.Release.config ) ниже вашего app.config.
6. Дважды щелкните на app.Release.config и добавьте следующий фрагмент:
<?xml version="1.0" encoding="utf-8" ?> <!-- For more information on using transformations see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. --> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <appSettings> <add key="setting1" value="new value" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" /> </appSettings> </configuration>
Как вы могли видеть, я изменил значение setting1 на « новое значение ».
« Xdt: Transform = SetAttributes » указывает, что действие будет выполнено. В этом случае он устанавливает атрибут записи.
« Xdt: Locator =» Match (key) »указывает условие, когда оно будет выполнено. В этом случае, когда « ключ » совпадает.
Вы можете обратиться к этому сообщению, чтобы увидеть другие возможные значения xdt: Transform и xdt: Locator .
Не забудьте сохранить файл после добавления настроек.
7. Теперь щелкните правой кнопкой мыши на app.Release.config и выберите Preview Transform . (Опять же: он появится только в том случае, если SlowCheetah установлен правильно).
8. Теперь вы можете увидеть сравнение между исходным app.config и app.Release.config .
9. Щелкните правой кнопкой мыши проект Windows Azure и выберите « Разгрузить проект ». Снова щелкните его правой кнопкой мыши и выберите «Редактировать файл [ваш проект Windows Azure] .ccproj».
10. Прокрутите вниз до конца файла и добавьте следующий фрагмент перед закрывающим тегом проекта.
<Import Project="$(CloudExtensionsDir)Microsoft.WindowsAzure.targets" /> <Target Name="CopyWorkerRoleConfigurations" BeforeTargets="AfterPackageComputeService"> <Copy SourceFiles="..WorkerRole1bin$(Configuration)WorkerRole1.dll.config" DestinationFolder="$(IntermediateOutputPath)WorkerRole1" OverwriteReadOnlyFiles="true" /> </Target> </Project>
В основном он выполняет задачу каждый раз перед упаковкой службы Windows Azure. Задача состоит в том, чтобы скопировать файл WorkerRole1.dll.config в IntermediateOutputPath .
Сохраните и закройте файл. Щелкните правой кнопкой мыши и снова выберите « Обновить проект» в проекте Windows Azure.
11. Хорошо, мы должны упаковать это сейчас и посмотреть, действительно ли это работает. Для этого щелкните правой кнопкой мыши проект Windows Azure и выберите «Пакет». Выберите Release для конфигурации сборки. Нажмите на Пакет, чтобы упаковать файл.
Когда выбран Release, мы ожидаем, что значение « setting1 » будет « новым значением », как мы установили внутри app.Release.config .
12. Проверка
Поскольку служба успешно упакована, вы можете видеть два файла как обычно (один — ServiceConfiguration.Cloud.cscfg, а другой — WindowsAzureWorkerConfigDemo.cspkg ).
Чтобы убедиться, что включена правильная конфигурация, измените расширение файла cspkg на .zip и разархивируйте его. Внутри каталога найдите файл самого большого размера (начните с WorkerRole1 , так как я называю свой проект Worker Role « WorkerRole1 »).
Измените его расширение на .zip и разархивируйте его снова. Перейдите в этот каталог и найдите каталог « Approot ». Вы могли видеть файл WorkerRole1.dll.config внутри.
13. Откройте этот файл и проверьте правильность его значения, установленного в нашей « релизной » сборке.
Мое правильно, как у вас?