I sugerują, że Twoje pytanie ujawnia, że przerosły app.config
--it czas, aby przenieść się do lepszego rozwiązania, a do rozpoczęcia adresowania niektórych zagadnień pokrewnych.
Po pierwsze, NIGDY nie należy automatycznie wdrażać pliku konfiguracyjnego do produkcji i należy oczekiwać, że personel obsługi operacji zdecydowanie odrzuci wszelkie próby wykonania tego. Oczywiście, jeśli jesteś personelem wsparcia operacji, powinieneś go odrzucić sam. Zamiast tego, twoje wydanie powinno zawierać pewne instrukcje ręcznego aktualizowania pliku konfiguracyjnego, z próbką dla ilustracji. Konfiguracja produkcji jest zbyt ważna dla mniejszych miar, chyba że po prostu nie doceniasz swojego systemu produkcyjnego.
Podobnie do testów i innych środowisk, ale w mniejszym stopniu, więc naprawdę potrzebujesz tylko swojego app.config
zapełnionego do własnych prac programistycznych.
Opcją jest osadzenie wielu konfiguracji w pojedynczym app.config
, co jest uzasadnione w przypadku małych, stosunkowo nieistotnych aplikacji lub we wczesnych etapach rozwoju/wydania. Na przykład utwórz ustawienie konfiguracyjne o nazwie podobnej do target-env
, które zawiera wartość, której używasz w kodzie, aby wybrać inne ustawienia konfiguracji, na przykład poprzez dodanie wartości do klawiszy innych ustawień konfiguracji.
Mam pierwszeństwo przed przejściem pod numer app.config
lub użycie go w minimalnym zakresie. W tym przypadku wolę umieścić w pliku tylko tyle danych konfiguracyjnych, aby umożliwić aplikacji/systemowi połączenie się z jej bazą danych, a następnie umieścić pozostałe szczegóły konfiguracji w specjalnej tabeli bazy danych do tego celu. Ma to wiele zalet, takich jak tworzenie bazy danych "świadomych" tego, jakie środowisko reprezentuje (programista, test, produkcja itp.) Oraz utrzymywanie konfiguracji i innych danych razem. Pakiet wdrożeniowy może wtedy być właściwie głupi, jeśli chodzi o konfiguracje i różnice środowiskowe - kod po prostu uzyskuje dostęp do danych konfiguracyjnych i działa odpowiednio, więc ten sam pakiet wdrożeniowy jest dobry dla każdego środowiska.
Jednak kluczowym czynnikiem sukcesu takiego podejścia jest to, że kod aplikacji musi "wiedzieć", czego oczekuje od konfiguracji i musi "wiedzieć", aby odrzucić niewłaściwą/niekompletną konfigurację. Tu należy spędzić czas, nie próbując obejść granic app.config
.
Zazwyczaj oznacza to utworzenie własnej klasy w celu uzyskania dostępu do danych konfiguracyjnych, a następnie użycie tej klasy w całej aplikacji. Daje to również wiele innych korzyści, takich jak dane konfiguracyjne o silnym typie: zamiast String
, należy zwrócić wartość DateTime
lub Url
, lub Integer
lub Currency
lub inną najlepiej dopasowaną do danych konfiguracyjnych i aplikacji.
The " " tag obsługuje atrybutu "stan". Czy mogę przetestować, czy warunek pasuje do "Dev_ *" (jak w "Dev_Debug" lub "Dev_Release"), aby użyć pliku Dev.config? –
Tylko dla odniesienia dla przyszłych czytelników: Wypróbowałem powyższy kod i zadziałało, ale NIE dla wdrożenia za pomocą ClickOnce. Po prostu nie został uwzględniony. Dlatego wybrałem rozwiązanie z http://blogs.msdn.com/b/vsto/archive/2010/03/09/tricks-with-app-config-and-clickonce-deployment-saurabh-bhatia.aspx, które jest podobny do odpowiedzi Steve'a. – chiccodoro