App.config: zakres użytkownika a zakres aplikacji

91

Dodałem plik App.config do mojego projektu. Utworzyłem dwa ustawienia z projektu> Właściwości> panel Ustawienia -

wprowadź opis obrazu tutaj

Zauważyłem, że dodając ustawienie, mogę zdefiniować zakres jako Userlub Application. -

  1. Użytkownik
  2. Podanie

Jeśli zdefiniuję ustawienie, Usergdy idzie do userSettingssekcji,
jeśli zdefiniuję ustawienie, Applicationgdy idzie do applicationSettingssekcji

App.config

<configuration>

    <userSettings>
        <DemoApp.Properties.Settings>
            <setting name="MySetting1" serializeAs="String">
                <value>Value1</value>
            </setting>
        </DemoApp.Properties.Settings>
    </userSettings>

    <applicationSettings>
        <DemoApp.Properties.Settings>
            <setting name="MySetting2" serializeAs="String">
                <value>Value2</value>
            </setting>
        </DemoApp.Properties.Settings>
    </applicationSettings>

</configuration>

Ale dostęp do tych ustawień można uzyskać w ten sam sposób z .cs-

Kod

string mySetting1 = DemoApp.Properties.Settings.Default.MySetting1;
string mySetting2 = DemoApp.Properties.Settings.Default.MySetting2;

Jaka jest różnica między Useri Applicationzakresem oraz w jakich okolicznościach należy wybierać między tymi dwoma?

Parag Meshram
źródło

Odpowiedzi:

72

Zasadniczo ustawienia aplikacji nie mogą być zmieniane podczas działania programu, a ustawienia użytkownika tak. Te ustawienia użytkownika powinny następnie zostać zapisane, aby użytkownik miał do czynienia ze znanym doświadczeniem, gdy uruchamia aplikację w następnej kolejności.

Edycja: Na przykład możesz napisać aplikację z różnymi modułami i musisz upewnić się, że moduł główny używa poprawnej wersji modułu zabezpieczeń. W tym celu należy skonfigurować ustawienie zakresu aplikacji, np .:

SecurityModuleVersion  string     Application      v1.21

Jakiś czas później, kiedy byłaby modułu zabezpieczeń, ty może zmienić wartość v1.22 podczas wdrażania w celu zapewnienia prawidłowego zabezpieczenia jest realizowany

Z drugiej strony, jeśli twoja aplikacja ma różne `` skórki '' ze zmianami kolorów, zmianami czcionek itp., Możesz ustawić użytkownika, ustawiając coś takiego jak następujące:

ApplicationSkin        string     User              DefaultSkin

Następnie, kiedy Michelle zmienia preferowaną skórę, aplikacja zapamiętuje jej ustawienia. Właściwości mogą teraz wyglądać następująco:

ApplicationSkin        string     User              HelloKittySkin
mcalex
źródło
czy u plz możesz wyjaśnić na przykładzie?
Parag Meshram
1
Domyślne ustawienia są w pliku konfiguracyjnym, tak? Ale gdzie są przechowywane zapisane ustawienia użytkownika?
Kyle Delaney
7
Ustawienia aplikacji są zapisywane w pliku * .exe.config. Ustawienia użytkownika są zapisywane w c: \ users \ <userid> \ AppData \ Local \ <companyname> \ <appname> \ <version> \ user.config (gdzie późniejsze są pobierane z pliku zestawu). Podczas ładowania ustawienia użytkownika mają pierwszeństwo przed ustawieniami aplikacji.
Schrodo_Baggins,
71

Ustawienia zakresu aplikacji są tylko do odczytu i można je zmienić tylko w czasie projektowania lub zmieniając plik .exe.config między sesjami aplikacji. Ustawienia zakresu użytkownika można jednak zapisywać w czasie wykonywania, tak jak zmienia się dowolną wartość właściwości. Nowa wartość utrzymuje się przez cały czas trwania sesji aplikacji. Możesz utrwalić zmiany ustawień użytkownika między sesjami aplikacji, wywołując metodę Settings.Save.

Źródło na MSDN: Używanie ustawień w C #

Ustawienia użytkownika służą na ogół do utrwalania preferencji użytkownika (np. Preferencje powiadomień aplikacji itp.). Ustawienia aplikacji zwykle dotyczą elementów, takich jak klucze API itp.

Jak zauważono w @kmote, gdy ustawienia użytkownika zostaną zmodyfikowane i utrwalone w czasie wykonywania (przez settings.Save()), zostaną one zapisane w folderze w pamięci profilu użytkownika (zwykle C: \ Users \ Username \ AppData \ Local \ AppName w systemie Windows 7 i nowszych ). W celu programowego określenia lokalizacji pliku, zobacz ten post .

CalC
źródło
każdy przykład na żywo byłby bardzo doceniony
Parag Meshram
1
Należy również zaznaczyć, że ustawień użytkownika nie można zmienić poprzez edycję pliku .config pomiędzy sesjami.
kmote
@kmote Oczywiście, że możesz! Jeśli sesja jest zamknięta, możesz zmienić konfigurację (a tym samym userSetting). Zmiana utrzymuje się i jest odzwierciedlana w programie po ponownym uruchomieniu sesji ... Przetestowałem ją przed chwilą.
Riegardt Steyn
5
@Heliac: Powinienem był być bardziej precyzyjny. Masz rację, że ustawienia użytkownika można zmieniać między sesjami. JEDNAK, gdy zmienisz je programowo (używając Settings.Save()), tworzony jest nowy plik konfiguracyjny i jest on ukrywany / chowany w C: \ Users [nazwa użytkownika] \ AppData \ Local \ Microsoft. Od tego momentu przy każdym uruchomieniu aplikacji ustawienia użytkownika będą pobierane wyłącznie z tego pliku, a wszelkie zmiany wprowadzone ręcznie w App.config lub Settings.settings będą ignorowane.
kmote
Czy istnieje sposób, aby znaleźć i wyświetlić zawartość tego pliku konfiguracyjnego użytkownika?
Kyle Delaney