Utilice el complemento SlowCheetah . Para más opciones y detalles sobre cómo usar SlowCheetah, siga leyendo.
Como ya habrá notado, no existe una forma predeterminada y fácil de usar diferentes archivos de configuración para un proyecto de tipo Biblioteca (.dll) . La razón es que el pensamiento actual es: "¡No es necesario"! Los desarrolladores de framework estiman que necesita configuración para el archivo ejecutable: ya sea una consola, escritorio, web, aplicación móvil u otra cosa. Si comienza a proporcionar la configuración para una dll , puede terminar con algo que puedo llamar un infierno de configuración . Es posible que ya no entienda (fácilmente) por qué esta y aquella variables tienen valores tan extraños que aparentemente vienen de la nada.
"Espera", puedes decir, "pero necesito esto para mi integración / prueba unitaria, ¡y es una biblioteca!". Y eso es cierto y esto es lo que puede hacer (elija solo uno, no mezcle):
1. SlowCheetah: transforma el archivo de configuración actual
Puede instalar SlowCheetah , un complemento de Visual Studio que realiza todas las modificaciones (o transformaciones) de XML de bajo nivel por usted. La forma en que funciona, brevemente:
- Instale SlowCheetah y reinicie Visual Studio (Visual Studio> Herramientas> Extensiones y actualizaciones ...> En línea> Galería de Visual Studio> busque "Slow Cheetah")
- Defina las configuraciones de su solución ( Debug y Release están ahí de forma predeterminada), puede agregar más (haga clic con el botón derecho en la solución en Solution Explorer > Configuration Manager ... > Active Solution Configuration > New ...
- Agregue un archivo de configuración si es necesario
- Haga clic derecho en el archivo de configuración> Agregar transformación
- Esto creará archivos de transformación, uno por su configuración
- Los archivos de transformación funcionan como inyectores / mutadores, encuentran el código XML necesario en el archivo de configuración original e inyectan nuevas líneas o mutan el valor necesario, lo que sea que le digas que haga
2. Jugar con el archivo .proj: copiar y cambiar el nombre de un archivo de configuración completamente nuevo
Tomado originalmente de aquí . Es una tarea personalizada de MSBuild que puede incrustar en el archivo .proj de Visual Studio . Copie y pegue el siguiente código en el archivo del proyecto
<Target Name="AfterBuild">
<Delete Files="$(TargetDir)$(TargetFileName).config" />
<Copy SourceFiles="$(ProjectDir)\Config\App.$(Configuration).config"
DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>
Ahora cree una carpeta en el proyecto llamado Configy agregue nuevos archivos allí: App.Debug.config , App.Release.config , etc. Ahora, dependiendo de su configuración, Visual Studio seleccionará el archivo de configuración de una Configcarpeta y lo copiará y le cambiará el nombre en el directorio de salida. Entonces, si tenía el proyecto PatternPA.Test.Integration y una configuración de depuración seleccionada, en la carpeta de salida después de la compilación encontrará un archivo PatternPA.Test.Integration.dll.config que se copió Config\App.Debug.configy se renombró posteriormente.
Estas son algunas notas que puede dejar en los archivos de configuración
<?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>
En Visual Studio puedes tener algo como esto

3. Utilice archivos de secuencias de comandos fuera de Visual Studio
Cada herramienta de compilación (como NAnt , MSBuild ) proporcionará capacidades para transformar el archivo de configuración según la configuración. Esto es útil si crea su solución en una máquina de compilación, donde necesita tener más control sobre qué y cómo preparar el producto para su lanzamiento.
Por ejemplo, puede usar la tarea de publicación web dll para transformar cualquier archivo de configuración
<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>