Oddzielne pliki app.config dla różnych konfiguracji

Bardzo często mamy okazję pracować nad aplikacją, która powinna być skonfigurowana odpowiednio do środowiska, w którym ją umieścimy. Najprostszy przykład – aplikacja w środowisku produkcyjnym prawdopodobnie będzie łączyła się do zupełnie innej bazy danych niż ta sama aplikacja w środowisku developerskim lub lokalnym. W dzisiejszym poście przedstawię najlepszy znany mi sposób pozwalający na bezbolesne i eleganckie rozwiązanie tego problemu. Jeżeli znasz coś lepszego, zapraszam do kontaktu ze mną albo pozostawienie komentarza.

  1. Instalujemy rozszerzenie do Visual Studio: SlowCheetah – XML Transforms.
  2. Otwieramy nasz projekt w Visual Studio i instalujemy bibliotekę SlowCheetah za pomocą nugeta.
  3. Klikamy prawym przyciskiem myszki na pliku konfiguracyjnym (app.config), a następnie wybieramy opcję ‚Add Transform’.
  4. Aktualny plik konfiguracyjny powinien stać się ‚rozwijalny’. Po rozwinięciu go powinniśmy zobaczyć oddzielne pliki dla każdej z konfiguracji.
  5. Przygotowujemy odpowiednie konfiguracje w zależności od środowiska. Przykład dla środowiska Debug:

  6. To w zasadzie tyle. Teraz za każdym razem kiedy będziemy budować naszą aplikację w konfiguracji Debug zostanie użyta odpowiednia transformacja, która wygeneruje prawidłowy plik konfiguracyjny.
  7. W bardzo łatwy sposób możemy podejrzeć wynikowy plik konfiguracyjny po nałożeniu transformacji. Klikamy prawym przyciskiem myszki na pliku (np. App.Debug.config) i wybieramy opcję ‚Preview Transform’. 8. Powinniśmy zobaczyć różnice między plikiem oryginalnym, a tym który powstanie po nałożeniu zdefiniowanych transformacji.
    I tak to właśnie wygląda. Moim zdaniem jest to bardzo wygodne rozwiązanie, które pozwala nam na zdefiniowanie wspólnej części konfiguracyjnej w pliku głównym (App.config) i kilku transformacji związanych z wartościami specyficznymi dla danego środowiska (umieszczamy je w plikach App.Debug.config, App.Release.config, itp.).

4 komentarzy dotyczących “Oddzielne pliki app.config dla różnych konfiguracji

    1. Oczywiście można podobny efekt osiągnąć za pomocą tylko tego, co oferuje nam Visual Studio (a nawet zwykły notatnik 🙂 ). Jednakże wydaje mi się, że jest to mało wygodne, bardziej czasochłonne i trudniejsze w utrzymywaniu. Musielibyśmy ręcznie zmodyfikować plik .csproj i utworzyć pliki konfiguracyjne dla poszczególnych środowisk. Przy każdej zmianie części wspólnej (takie same ustawienia dla wszystkich środowisk) trzeba by aktualizować wszystkie pliki, chyba że pokusimy się o przygotowanie skryptu do transformacji, ale to też dodatkowy kłopot. Być może wiesz o istnieniu lepszego rozwiązania?
      Przykład przedstawiony w poście jest bardzo trywialny i zgadzam się, że w jego przypadku można by się obejść bez dodatkowych narzędzi.

Dodaj komentarz

Twój adres email nie będzie opublikowany. Pola wymagane zostały oznaczone *