Статьи

Применение преобразования Config app.config в рабочей роли Windows Azure

Фон

Во многих случаях нам нужно иметь два разных набора параметров конфигурации (скажем, один для среды разработки и другой для производственной среды). Обычно мы меняем настройки по одному перед развертыванием на рабочем сервере и снова возвращаем их в разработку. Это очень раздражает, особенно когда у вас много настроек.

Преобразование 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 позволяет нам выбирать конфигурацию сервиса и конфигурацию сборки.

1

Конфигурация службы — это, по сути, конфигурация для служб 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 .

4

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 предложит добавить импорт проекта преобразования, нажмите «Да», чтобы продолжить.

2

5. Затем вы увидите дочерний файл ( app.Debug.config и app.Release.config ) ниже вашего app.config.

5

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 установлен правильно).

6

8. Теперь вы можете увидеть сравнение между исходным app.config и app.Release.config .

7

9. Щелкните правой кнопкой мыши проект Windows Azure и выберите « Разгрузить проект ». Снова щелкните его правой кнопкой мыши и выберите «Редактировать файл [ваш проект Windows Azure] .ccproj».

10

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 для конфигурации сборки. Нажмите на Пакет, чтобы упаковать файл.

8 9

Когда выбран Release, мы ожидаем, что значение « setting1 » будет « новым значением », как мы установили внутри app.Release.config .

12. Проверка

Поскольку служба успешно упакована, вы можете видеть два файла как обычно (один — ServiceConfiguration.Cloud.cscfg, а другой — WindowsAzureWorkerConfigDemo.cspkg ).

Чтобы убедиться, что включена правильная конфигурация, измените расширение файла cspkg на .zip и разархивируйте его. Внутри каталога найдите файл самого большого размера (начните с WorkerRole1 , так как я называю свой проект Worker Role « WorkerRole1 »).

11

Измените его расширение на .zip и разархивируйте его снова. Перейдите в этот каталог и найдите каталог « Approot ». Вы могли видеть файл WorkerRole1.dll.config внутри.

13. Откройте этот файл и проверьте правильность его значения, установленного в нашей « релизной » сборке.

12

Мое правильно, как у вас?