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 Config
y 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 Config
carpeta 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.config
y 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>