2010-01-31 10 views
17

Stworzyliśmy aplikację WinForm i przechowujemy niektóre konfiguracje za pośrednictwem klasy ConfigurationManager. W celu zapisania informacji UżywamKiedy tworzony jest app.config, gdy plik app.exe.config i jaka jest różnica

Configuration pConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
pConfig.AppSettings.Settings.Add("updates", szUpdatesURL); 
pConfig.Save(ConfigurationSaveMode.Modified); 

Problemem jest to, że w niektórych przypadkach aplikacja tworzy „appname” plik .config i innych okazjach „appname” .exe.config.

Tutaj muszę zauważyć, że plik konfiguracyjny nie jest domyślnie dostarczany, ponieważ nie zawsze jest wymagany.

Konfiguracje są zapisywane przy pierwszym uruchomieniu programu. To spowodowało, że mamy problem i nie mogę określić, kiedy powstaje jeden lub drugi.

Przeprowadziłem testy na tym samym komputerze z tym samym plikiem .exe i otrzymałem oba wyniki. Co tu się dzieje?

Jaka jest różnica między tymi dwoma i jak określić, który z nich należy utworzyć? Wielkie dzięki

+0

Czy istnieje jakiś powód, dla którego nie można wysłać pustego pliku konfiguracyjnego? – Paolo

+0

@Paolo Niezupełnie, ale problem polega na tym, że pierwotnie wdrożyliśmy tę metodę, a potrzeba pliku konfiguracyjnego pojawiła się w nowszej wersji. To powoduje problemy dla użytkowników starszych wersji, próbujących dokonać aktualizacji. –

Odpowiedz

21

"Plik appname.exe.config" jest tworzony automatycznie podczas kompilowania aplikacji. Jest to plik, który powinien być dystrybuowany do użytkowników końcowych (oczywiście wraz z plikiem exe). Ustawienia ustawione w pliku appname.config są przesyłane do pliku appname.exe.config. They are essentially the same files. Przyczyną, dla której plik appname.config istnieje, jest to, że po uruchomieniu pliku wykonywalnego jego plik konfiguracyjny jest po prostu nazwą pliku wykonywalnego z przyrostkiem .config. Jeśli jednak nazwa pliku wykonywalnego ulegnie zmianie, będziesz musiał ręcznie zmienić nazwę pliku exe.config. Dlatego też, automatycznie zmieniając nazwę na czas kompilacji, app.config może zmienić jego nazwę na nowy plik nazwa_aplikacji.exe.config, a CLR nadal go odbiera. Prawdopodobnie okaże się, że plik appname.exe.config jest tworzony w katalogu bin. Mam nadzieję, że to jasne :) Poniższe linki mogą wyjaśniać to nieco bardziej szczegółowo.

Istnieje dobre wyjaśnienie here. Kolejny dobry odczyt to CodePlex.

+0

Dzięki. Jednak moją główną obawą jest to, że domyślnie nie wysyłam pliku konfiguracyjnego z plikiem exe. W niektórych przypadkach program tworzy plik konfiguracyjny. I w takich przypadkach mam problem, który czasami tworzy na przykład "Appname" .config, a czasami tworzy "Appname" .exe.config. To właśnie mnie pomyliło, ponieważ zrozumiałem, że domyślne ustawienia nazwy pliku powinny być * .exe.config –

+0

Z przeprowadzonych testów, nie wymyśliłem konkluzji na temat, kiedy faktycznie "appname" .config jest rzeczywiście wygenerowany. Jest jednak oczywiste, że aby uniknąć takich nieporozumień, domyślnie wysyłamy "appname" .exe.config. –

Powiązane problemy