App.config: Escopo do usuário x aplicativo

90

Eu adicionei o arquivo App.config em meu projeto. Eu criei duas configurações em Projeto> Propriedades> painel Configurações -

insira a descrição da imagem aqui

Percebi que quando estou adicionando uma configuração, posso definir o escopo como Userou Application. -

  1. Do utilizador
  2. Inscrição

Se eu definir configuração conforme Uservai para a userSettingsseção,
se eu definir configuração conforme Applicationvai para a applicationSettingsseção

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>

Mas, essas configurações podem ser acessadas da mesma forma em .cs-

Código

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

Qual é a diferença entre Usere Applicationescopo e em que circunstâncias se deve escolher entre os dois?

Parag Meshram
fonte

Respostas:

72

Basicamente, as configurações do aplicativo não podem ser alteradas durante a execução de um programa e as configurações do usuário podem. Essas configurações do usuário devem ser salvas para que o usuário tenha uma experiência familiar quando ele executar o aplicativo da próxima vez.

Edit: Por exemplo, você pode escrever seu aplicativo com módulos diferentes e precisa garantir que seu módulo principal está usando a versão correta do seu módulo de segurança. Para isso, você deve definir uma configuração de escopo do aplicativo, por exemplo:

SecurityModuleVersion  string     Application      v1.21

Algum tempo depois, ao refatorar o módulo de segurança, você pode alterar o valor para v1.22 ao implantar para garantir que a segurança correta esteja sendo implementada

Por outro lado, se o seu aplicativo tiver diferentes 'skins' com mudanças de cor, mudanças de fonte, etc., então você pode configurar uma configuração de usuário como o seguinte:

ApplicationSkin        string     User              DefaultSkin

Então, quando Michelle muda para o skin que ela prefere, o aplicativo se lembra de suas configurações. As propriedades agora podem ser semelhantes a:

ApplicationSkin        string     User              HelloKittySkin
mcalex
fonte
u plz pode explicar usando um exemplo?
Parag Meshram de
1
As configurações padrão estão no arquivo de configuração, sim? Mas onde as configurações do usuário salvas são armazenadas?
Kyle Delaney
7
As configurações do aplicativo são salvas no arquivo * .exe.config. As configurações do usuário são salvas em c: \ users \ <userid> \ AppData \ Local \ <companyname> \ <appname> \ <version> \ user.config (onde o último é obtido do arquivo de montagem). No carregamento, as configurações do usuário têm precedência sobre as configurações do aplicativo.
Schrodo_Baggins
71

As configurações de escopo do aplicativo são somente leitura e só podem ser alteradas em tempo de design ou alterando o arquivo .exe.config entre as sessões do aplicativo. As configurações de escopo do usuário, entretanto, podem ser escritas em tempo de execução, da mesma forma que você alteraria qualquer valor de propriedade. O novo valor persiste durante a sessão do aplicativo. Você pode manter as alterações nas configurações do usuário entre as sessões do aplicativo chamando o método Settings.Save.

Fonte no msdn: usando configurações em C #

As configurações do usuário geralmente são usadas para persistir as preferências do usuário (por exemplo, preferências de notificação do aplicativo, etc.). As configurações do aplicativo geralmente são para itens como chaves de API etc.

Conforme observado por @kmote, quando as configurações do usuário são modificadas e mantidas em tempo de execução (via settings.Save()), elas serão gravadas em uma pasta dentro do armazenamento do Perfil do Usuário (normalmente C: \ Usuários \ Nome de usuário \ AppData \ Local \ AppName no Windows 7 e superior ) Para determinar a localização do arquivo de forma programática, consulte esta postagem .

CalC
fonte
qualquer exemplo ao vivo seria muito apreciado
Parag Meshram
1
Também deve ser apontado que as configurações do usuário não podem ser alteradas editando o arquivo .config entre as sessões.
kmote
@kmote Claro que você pode! Se a sessão for fechada, você pode alterar a configuração (e, portanto, o userSetting). A mudança persiste e se reflete no programa quando você inicia a sessão novamente ... Eu testei agora mesmo.
Riegardt Steyn
5
@Heliac: Eu deveria ter sido mais preciso. Você está correto ao dizer que as configurações do usuário podem ser alteradas entre as sessões. NO ENTANTO, depois de alterá-los programaticamente (usando Settings.Save()), um novo arquivo de configuração é criado e está oculto / enterrado em C: \ Usuários [nome de usuário] \ AppData \ Local \ Microsoft. A partir desse ponto, sempre que o aplicativo for iniciado, as configurações do usuário serão retiradas exclusivamente desse arquivo e quaisquer alterações feitas manualmente em App.config ou Settings.settings serão ignoradas.
kmote
Existe uma maneira de localizar e visualizar o conteúdo deste arquivo de configuração do usuário?
Kyle Delaney