2009-02-26 16 views
25

Sposób, w jaki obecnie obsługiwać to przez posiadające wiele plików konfiguracyjnych, takich jak:Jak radzić sobie z wieloma plikami web.config dla wielu środowisk?

web.config 
web.Prod.config 
web.QA.config 
web.Dev.config 

Gdy projekt zostanie wdrożony do różnych środowiskach po prostu zmienić nazwę odpowiedni plik z prawidłowymi ustawieniami.

Ktoś ma sugestie, jak sobie z tym poradzić lepiej?

EDIT: Oto niektóre z rzeczy, które zmieniają się w każdej konfiguracji:

  • WCF klienta końcowego adresów URL i zabezpieczeń
  • niestandardowe configs Database
  • ciągów połączenia
  • sesji
  • ustawień log4net
+0

To tak, jak to zrobić, z wyjątkiem tego web.config i internetowych dev.config to samo. – tvanfosson

Odpowiedz

17

Scott Gu mieli się article na ten jeden raz. Rozwiązaniem, które przedstawił, było użycie zdarzenia poprzedzającego kompilację do skopiowania poprawnej konfiguracji na miejsce w zależności od wybranej konfiguracji budowania.

Zauważyłem również, że istnieje już podobny znak question tutaj na SO.

0

To naprawdę zależy od różnicy między środowiskiem s to powoduje, że używasz różnych plików web.config. Czy możesz podać więcej informacji, dlaczego każde środowisko wymaga obecnie innego?

+0

Wyobrażam sobie, że każde środowisko wymagałoby wyspecjalizowanych połączeń z bazami danych, konfiguracji usług państwowych i innych konfigurowalnych elementów, które zależą w dużym stopniu od środowiska, w którym się znajdujesz. –

0

Sposób robiliśmy to ma zastąpić sekcję AppSettings:

<appSettings file="../AppSettingsOverride.config"> 
    <add key="key" value="override" />  
    ... 
</appSettings> 

Działa to tylko dla sekcji appSettings i tak jest przydatny tylko do pewnego stopnia. Byłbym bardzo zainteresowany bardziej niezawodnymi rozwiązaniami.

Edycja Poniżej

Właśnie oglądałem to: http://channel9.msdn.com/shows/10-4/10-4-Episode-10-Making-Web-Deployment-Easier/

VS2010 ma przekształca konfiguracyjne, które wyglądają dość niesamowite, powinny dołożyć wielu konfiguracjach kompletny bryzę.

+0

To jest interesujące - czy zarządzasz każdym z plików AppSettingsOverride.config w Kontrola źródła również? Jaka jest różnica między używaniem twojej metody a używaniem oddzielnych plików web.config? –

+0

Największą zaletą jest to, że każdy programista może mieć własne ustawienia zastępowania. To, co jest w web.config w kontroli źródła, jest tym, czego chcemy w głównym środowisku wdrażania i mamy przesłonięcia na naszych serwerach dev i testowych. Prawdopodobnie połączyłem to z tym, co zostało już powiedziane dla najlepszego efektu. –

1

W Visual Studio tworzę zdarzenia kompilacji xcopy i zapisuję wszystkie pliki konfiguracyjne w folderze/config. Potrzebujesz tylko jednego zdarzenia dla wszystkich konfiguracji, jeśli nazwiesz pliki po konfiguracji kompilacji: np. Nadpisanie pliku web.config za pomocą /config/web.$(Configuration).config

0

Mamy kilka obejść (nie wszystkie z nich są Sporządzono przy pomocy web.config, ale ten sam pomysł)

  1. Dołączamy wiele plików konfiguracyjnych do wdrożenia w pakiecie. Podczas instalacji określamy środowisko, na którym się instalujemy.
  2. Przeprowadź migrację wszystkich ustawień środowiska do serwera bazy danych dla tego środowiska. WebServer zapewnia swoje środowisko podczas żądania nazwy serwera
  3. Podaj wiele ustawień (1 na środowisko) i użyj kodu żądającego innych ustawień.
  4. Kombinacja 2 i 3 (przesłonić część ustawień opartych na środowisku - dla nazwy serwera przykład zastosowania)
0

Przez większość różnych programów do zarządzania wersjami (subversion, git, etc) można zignorować określone pliki.

Zatem w dywersji, musiałbym:

configure.template.php - Ten plik udostępniony jest na matrycy numerów wersji i zawiera dane konfiguracyjne, takie jak puste DSN configure.php - Plik ten jest ignorowany, tak że zmiany w nim nie są śledzone.

w Subversion, sposób na to jest:

svn pe svn: ignore. Otworzy się twój edytor, a następnie wpisz configure.php

Zapisz, wyjdź, sprawdź zmiany i gotowe.

1

Moim ulubionym sposobem rozwiązania tego problemu jest atrybut configSource. Wprawdzie używam go tylko na jednym elemencie (<connectionStrings>), ale zapewnia on łatwy sposób na zamianę i wybranie różnych segmentów pliku web.config (co robię podczas instalacji za pomocą projektu WebSetup).

1

ja też użyć web.DEV.config, web.TEST.config, web.PROD.config itp

znajdę ten sposób najbardziej najprostszy, najprostszy i prosta droga, jeśli projekty nie są złożony. Nie lubię robić rzeczy bardziej skomplikowanych, niż to konieczne.

Jednak użyłem NAnt i myślę, że działa to dobrze. Możesz skonfigurować kompilacje dla różnych środowisk. NAnt bierze trochę czytania, aby nauczyć się go używać, ale jest dość elastyczny.

http://aspnet.4guysfromrolla.com/articles/120104-1.aspx

http://nant.sourceforge.net/

użyłem go wraz z CruiseControl.NET i NUnit do wykonywania automatycznego codziennie buduje z walidacji testów jednostkowych i uważamy, że działa dobrze razem.

Powiązane problemy