Используйте плагин SlowCheetah . Чтобы узнать больше о возможностях и подробностях использования SlowCheetah, продолжайте читать.
Как вы уже заметили, не существует простого и простого способа использования различных файлов конфигурации для проекта типа библиотеки (.dll) по умолчанию . Причина в том, что сейчас думают: «Вам не нужно»! Разработчики фреймворка считают, что вам нужна конфигурация исполняемого файла: будь то консоль, рабочий стол, веб, мобильное приложение или что-то еще. Если вы начнете предоставлять конфигурацию для dll , вы можете получить что-то, что я могу назвать адом конфигурации . Возможно, вы больше не поймете (легко), почему те или иные переменные имеют такие странные значения, казалось бы, ниоткуда.
«Постойте», - скажете вы, «но мне это нужно для моей интеграции / модульного тестирования, и это библиотека!». И это правда, и вот что вы можете сделать (выберите только один, не смешивайте):
1. SlowCheetah - преобразует текущий файл конфигурации
Вы можете установить SlowCheetah - подключаемый модуль Visual Studio, который выполняет все низкоуровневые XML-запросы (или преобразования) за вас. Кратко, как это работает:
- Установите SlowCheetah и перезапустите Visual Studio (Visual Studio> Инструменты> Расширения и обновления ...> В сети> Галерея Visual Studio> найдите "Slow Cheetah")
- Определите конфигурации своего решения ( отладка и выпуск по умолчанию), вы можете добавить больше (щелкните правой кнопкой мыши решение в обозревателе решений > Configuration Manager ... > Active Solution Configuration > New ...
- При необходимости добавьте файл конфигурации
- Щелкните правой кнопкой мыши файл конфигурации> Добавить преобразование
- Это создаст файлы преобразования - по одному для вашей конфигурации.
- Файлы преобразования работают как инжекторы / мутаторы, они находят необходимый XML-код в исходном файле конфигурации и вводят новые строки или изменяют необходимое значение, что бы вы ему ни сказали.
2. Поиграйте с файлом .proj - скопируйте и переименуйте новый файл конфигурации.
Изначально взято отсюда . Это настраиваемая задача MSBuild, которую можно встроить в файл .proj Visual Studio . Скопируйте и вставьте следующий код в файл проекта
<Target Name="AfterBuild">
<Delete Files="$(TargetDir)$(TargetFileName).config" />
<Copy SourceFiles="$(ProjectDir)\Config\App.$(Configuration).config"
DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>
Теперь создайте папку в названном проекте Config
и добавьте туда новые файлы: App.Debug.config , App.Release.config и так далее. Теперь, в зависимости от вашей конфигурации, Visual Studio выберет файл конфигурации из Config
папки и скопирует-переименует его в выходной каталог. Итак, если у вас был проект PatternPA.Test.Integration и выбрана конфигурация Debug , в выходной папке после сборки вы найдете файл PatternPA.Test.Integration.dll.config, который был скопирован Config\App.Debug.config
и впоследствии переименован.
Это некоторые примечания, которые вы можете оставить в файлах конфигурации.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- This file is copied and renamed by the 'AfterBuild' MSBuild task -->
<!-- Depending on the configuration the content of projectName.dll.config
is fully substituted by the correspondent to build configuration file
from the 'Config' directory. -->
</configuration>
В Visual Studio у вас может быть что-то вроде этого
3. Используйте файлы сценариев вне Visual Studio.
Каждый инструмент сборки (например, NAnt , MSBuild ) предоставляет возможности преобразования файла конфигурации в зависимости от конфигурации. Это полезно, если вы создаете свое решение на машине сборки, где вам нужно больше контролировать, что и как вы готовите продукт к выпуску.
Например, вы можете использовать задачу веб-публикации dll для преобразования любого файла конфигурации
<UsingTask AssemblyFile="..\tools\build\Microsoft.Web.Publishing.Tasks.dll"
TaskName="TransformXml"/>
<PropertyGroup>
<!-- Path to input config file -->
<TransformInputFile>path to app.config</TransformInputFile>
<!-- Path to the transformation file -->
<TransformFile>path to app.$(Configuration).config</TransformFile>
<!-- Path to outptu web config file -->
<TransformOutputFile>path to output project.dll.config</TransformOutputFile>
</PropertyGroup>
<Target Name="transform">
<TransformXml Source="$(TransformInputFile)"
Transform="$(TransformFile)"
Destination="$(TransformOutputFile)" />
</Target>