Usa il plugin SlowCheetah . Per ulteriori opzioni e dettagli su come utilizzare SlowCheetah, continua a leggere.
Come hai già notato, non esiste un modo semplice e predefinito per utilizzare diversi file di configurazione per un progetto di tipo Libreria (.dll) . Il motivo è che il pensiero corrente è: "Non è necessario"! Gli sviluppatori di framework ritengono che sia necessaria la configurazione per il file eseguibile: che si tratti di una console, desktop, web, app mobile o qualcos'altro. Se inizi a fornire la configurazione per una dll , potresti finire con qualcosa che posso chiamare un inferno di configurazione . Potresti non capire più (facilmente) perché questa e quella variabili hanno valori così strani che apparentemente provengono dal nulla.
"Aspetta", - potresti dire, "ma ne ho bisogno per la mia integrazione / unit test, ed è una libreria!". E questo è vero e questo è quello che puoi fare (scegli solo uno, non mescolare):
1. SlowCheetah - trasforma il file di configurazione corrente
Puoi installare SlowCheetah , un plug-in di Visual Studio che esegue tutti i poking (o trasformazioni) XML di basso livello per te. Il modo in cui funziona, brevemente:
- Installa SlowCheetah e riavvia Visual Studio (Visual Studio> Strumenti> Estensioni e aggiornamenti ...> Online> Raccolta di Visual Studio> cerca "Slow Cheetah")
- Definisci le configurazioni della tua soluzione ( Debug e Release sono presenti per impostazione predefinita), puoi aggiungerne altri (fai clic con il tasto destro sulla soluzione in Esplora soluzioni > Gestione configurazione ... > Configurazione soluzione attiva > Nuovo ...
- Aggiungi un file di configurazione se necessario
- Fare clic con il tasto destro sul file di configurazione> Aggiungi trasformazione
- Questo creerà i file di trasformazione, uno per la tua configurazione
- I file di trasformazione funzionano come iniettori / mutatori, trovano il codice XML necessario nel file di configurazione originale e inseriscono nuove righe o mutano il valore necessario, qualunque cosa tu gli dica di fare
2. Giocherellare con il file .proj - copia e rinomina un nuovo file di configurazione
Originariamente ripreso da qui . È un'attività MSBuild personalizzata che puoi incorporare nel file .proj di Visual Studio . Copia e incolla il codice seguente nel file di progetto
<Target Name="AfterBuild">
<Delete Files="$(TargetDir)$(TargetFileName).config" />
<Copy SourceFiles="$(ProjectDir)\Config\App.$(Configuration).config"
DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>
Ora crea una cartella nel progetto chiamato Config
e aggiungi nuovi file lì: App.Debug.config , App.Release.config e così via. Ora, a seconda della configurazione, Visual Studio selezionerà il file di configurazione da una Config
cartella e lo copia e rinominerà nella directory di output. Quindi, se hai selezionato il progetto PatternPA.Test.Integration e una configurazione di debug , nella cartella di output dopo la compilazione troverai un file PatternPA.Test.Integration.dll.config che è stato copiato Config\App.Debug.config
e rinominato in seguito.
Queste sono alcune note che puoi lasciare nei file di configurazione
<?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>
In Visual Studio puoi avere qualcosa di simile
3. Utilizzare file di scripting all'esterno di Visual Studio
Ogni strumento di compilazione (come NAnt , MSBuild ) fornirà funzionalità per trasformare il file di configurazione a seconda della configurazione. Ciò è utile se si crea la soluzione su una macchina di compilazione, dove è necessario avere un maggiore controllo su cosa e come si prepara il prodotto per il rilascio.
Ad esempio, puoi utilizzare l'attività di pubblicazione su Web dll per trasformare qualsiasi file di configurazione
<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>