Użyj wtyczki SlowCheetah . Aby uzyskać więcej opcji i szczegółów dotyczących korzystania ze SlowCheetah, czytaj dalej.
Jak już zauważyłeś, nie ma domyślnego i łatwego sposobu na użycie różnych plików konfiguracyjnych dla projektu typu Biblioteka (.dll) . Powodem jest to, że obecne myślenie brzmi: „Nie musisz”! Twórcy frameworka uważają, że potrzebujesz konfiguracji dla pliku wykonywalnego: czy to konsoli, komputera stacjonarnego, aplikacji internetowej, aplikacji mobilnej czy czegoś innego. Jeśli zaczniesz konfigurować bibliotekę dll , możesz skończyć z czymś, co mogę nazwać piekłem konfiguracji . Możesz już nie rozumieć (łatwo), dlaczego zmienne te i te mają tak dziwne wartości, które pojawiają się znikąd.
„Zaczekaj” - możesz powiedzieć, „ale potrzebuję tego do mojej integracji / testów jednostkowych, a to jest biblioteka!”. I to prawda i oto, co możesz zrobić (wybierz tylko jeden, nie mieszaj):
1. SlowCheetah - przekształca aktualny plik konfiguracyjny
Możesz zainstalować SlowCheetah - wtyczkę Visual Studio, która wykona za Ciebie wszystkie niskopoziomowe kodowanie XML (lub transformację). Sposób działania, pokrótce:
- Zainstaluj SlowCheetah i uruchom ponownie program Visual Studio (Visual Studio> Narzędzia> Rozszerzenia i aktualizacje ...> Online> Visual Studio Gallery> wyszukaj „Slow Cheetah”)
- Zdefiniuj konfiguracje rozwiązania ( debugowanie i wydanie są dostępne domyślnie), możesz dodać więcej (kliknij prawym przyciskiem myszy rozwiązanie w Eksploratorze rozwiązań > Configuration Manager ... > Konfiguracja aktywnego rozwiązania > Nowy ...
- W razie potrzeby dodaj plik konfiguracyjny
- Kliknij prawym przyciskiem myszy plik konfiguracyjny> Dodaj transformację
- Spowoduje to utworzenie plików transformacji - po jednym dla każdej konfiguracji
- Pliki transformacji działają jako wtryskiwacze / mutatory, znajdują potrzebny kod XML w oryginalnym pliku konfiguracyjnym i wstrzykują nowe wiersze lub modyfikują wymaganą wartość, cokolwiek mu powiesz
2. Baw się z plikiem .proj - kopiuj i zmieniaj nazwę zupełnie nowego pliku konfiguracyjnego
Pierwotnie wzięty stąd . Jest to niestandardowe zadanie programu MSBuild, które można osadzić w pliku .proj programu Visual Studio . Skopiuj i wklej następujący kod do pliku projektu
<Target Name="AfterBuild">
<Delete Files="$(TargetDir)$(TargetFileName).config" />
<Copy SourceFiles="$(ProjectDir)\Config\App.$(Configuration).config"
DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>
Teraz utwórz folder w projekcie o nazwie Config
i dodaj tam nowe pliki: App.Debug.config , App.Release.config i tak dalej. Teraz, w zależności od konfiguracji, program Visual Studio wybierze plik konfiguracyjny z Config
folderu i skopiuje go i zmień jego nazwę do katalogu wyjściowego. Więc jeśli masz projekt PatternPA.Test.Integration i wybraną konfigurację Debug , w folderze wyjściowym po kompilacji znajdziesz plik PatternPA.Test.Integration.dll.config , który został skopiowany Config\App.Debug.config
i zmieniony później.
Oto kilka uwag, które możesz zostawić w plikach konfiguracyjnych
<?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>
W Visual Studio możesz mieć coś takiego
3. Używaj plików skryptów poza programem Visual Studio
Każde narzędzie do kompilacji (takie jak NAnt , MSBuild ) zapewni możliwości przekształcania pliku konfiguracyjnego w zależności od konfiguracji. Jest to przydatne, jeśli tworzysz rozwiązanie na maszynie do kompilacji, na której musisz mieć większą kontrolę nad tym, co i jak przygotowujesz produkt do wydania.
Na przykład możesz użyć zadania dll publikowania w sieci Web, aby przekształcić dowolny plik konfiguracyjny
<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>