How do you manage.NET app.pliki konfiguracyjne dla dużych aplikacji?

Załóżmy, że duża aplikacja złożona zbudowana na kilku podstawowych komponentach spakowanych we własne zespoły: (odczyt bazy danych, programy obsługi protokołów, itp.). W przypadku niektórych wdrożeń może to obejmować ponad 20 zestawów. Każdy z tych zestawów zawiera informacje o ustawieniach lub konfiguracji. Nasz zespół lubi edytor ustawień VS (i łatwy w użyciu kod, który generuje!), a rozróżnienie między aplikacją a użytkownikiem zaspokaja większość naszych potrzeb.

Ale....

To jest bardzo uciążliwe aby skopiować i wkleić wiele sekcji konfiguracyjnych do naszej aplikacji .xml. Co więcej, w przypadku współdzielonych komponentów, które mają podobne konfiguracje w różnych aplikacjach, oznacza to, że musimy zachować zduplikowane ustawienia w wielu .pliki konfiguracyjne.

EntLib Microsoftu rozwiązuje ten problem za pomocą zewnętrznego narzędzia do generowania potwora .plik konfiguracyjny, ale to też wydaje się klunky.

Jakich technik używasz do zarządzania dużym. NET .pliki konfiguracyjne z sekcjami z wielu wspólne zespoły? Jakiś mechanizm włączający? Niestandardowe czytniki konfiguracji?

Kontynuacja:

Odpowiedź Willa była dokładnie tym, do czego zmierzałem i wygląda elegancko dla sekcji pary klucz/wartość. Czy istnieje sposób na połączenie tego podejścia z custom configuration sections ?

Dzięki również za sugestie dotyczące zarządzania innymi .konfiguracje dla różnych celów kompilacji. To również bardzo przydatne.

Dave

Author: Community, 2008-09-18

5 answers

Używasz jednego głównego pliku konfiguracyjnego, który wskazuje na inne pliki konfiguracyjne. Oto przykład jak to zrobić.


W przypadku, gdy link gnije, należy podać configSource dla konkretnej sekcji konfiguracji. Umożliwia to zdefiniowanie danej sekcji w osobnym pliku.

<pages configSource="pages.config"/>

Co oznacza, że istnieje plik o nazwie " pages.config " w tym samym katalogu, który zawiera całe drzewo węzłów <pages />.

 20
Author: Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-05 14:47:47

Moją preferowaną metodą jest użycie MSBuild, jeśli klikniesz prawym przyciskiem myszy projekt i klikniesz "rozładuj", pojawi się nowa opcja menu z napisem "edytuj". Wybierz to, a otworzy się plik projektu, abyś mógł go edytować, przewiń w dół, aż znajdziesz skomentowaną sekcję o nazwie "AfterBuild".

Możesz wtedy dodać coś w stylu:

<Target Name="AfterBuild">
    <Delete Files="$(TargetDir)$(TargetFileName).config" />
    <Copy SourceFiles="$(ProjectDir)$(Configuration).config" DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>

Zastąpi to konfigurację aplikacji jedną o nazwie [Release|Debug].exe.config. Dzięki czemu można utrzymywać oddzielne konfiguracje w zależności od jak powstaje projekt.

Ale szybką i brudną opcją (jeśli nie chcesz grać z msbuild) jest po prostu utrzymanie oddzielnych plików konfiguracyjnych, a następnie zdefiniowanie, który z nich chcesz dołączyć, jak to:

<appSettings configSource="Config\appSettingsDebug.config"/>
<roleManager configSource="Config\roleManagerDebug.config"/>

I jeśli robisz asp.net aplikacja, microsoft zapewnia wielkie narzędzie o nazwie "Web Deployment Projects", które pozwoli Ci zarządzać tym wszystkim łatwo, Kliknij tutaj

 9
Author: sontek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 04:46:40

Świetnym sposobem zarządzania dużymi zestawami konfiguracji jest tworzenie niestandardowych sekcji konfiguracji. Phil Haack omawia to bardzo ładnie w tym artykule Custom configuration sections in 3 easy steps

 4
Author: Wayne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-05 14:42:27

Skonfiguruj konfigurację kompilacji dla każdego środowiska wdrożeniowego/testowego i używaj oddzielnych plików konfiguracyjnych na podstawie każdej konfiguracji kompilacji.

ScottGu ma ładny post na ten temat i działa świetnie. Jedyne co mamy to to, że musimy się upewnić, że pliki konfiguracyjne (web.config) są sprawdzane do edycji z TFS przed każdym kompilacji tak, że można go skopiować.

 2
Author: Geir-Tore Lindsve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 07:19:48

Stworzyliśmy klasę AssemblySettingsConfig, która działa jak ConfigurationManager, ale ładuje .config dla każdego pojedynczego złożenia. Więc aplikacja ma .config i wszelkie biblioteki DLL, do których się odwołuje, mają swoje własne .pliki konfiguracyjne. Do tej pory dobrze się spisał.

 1
Author: core,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 02:36:26