Ao usar um arquivo Settings.settings no .NET, onde a configuração é realmente armazenada?


100

Ao usar um arquivo Settings.settings no .NET, onde a configuração é realmente armazenada? Quero excluir as configurações salvas para voltar ao estado padrão, mas não consigo encontrar onde estão armazenadas ... alguma ideia?

Respostas:


100

Depende se a configuração que você escolheu está no escopo "Usuário" ou no escopo "Aplicativo".

Escopo do usuário

As configurações de escopo do usuário são armazenadas em

C: \ Documents and Settings \ nome de usuário \ Local Settings \ Application Data \ ApplicationName

Você pode ler / escrever no tempo de execução.

Para Vista e Windows 7, a pasta é

C: \ Users \ username \ AppData \ Local \ ApplicationName

ou

C: \ Users \ username \ AppData \ Roaming \ ApplicationName

Escopo de aplicação

As configurações de escopo do aplicativo são salvas AppName.exe.confige somente leitura no tempo de execução.


20
A pasta para as configurações de escopo do usuário no Vista e Win7 é C: \ Usuários \ nome de usuário \ AppData \ Local \ Nome do aplicativo \ Editor \ Nome do aplicativo \ Versão ou C: \ Usuários \ nome do usuário \ AppData \ Roaming \ Nome do aplicativo \ Editor \ Nome do aplicativo \ Versão dependendo de o valor da propriedade Roaming no painel Configurações.
jakdep

4
a menos que seja um addin, caso em que será AppName.dll.config
Anonymous Type

4
Meu user.config local no Windows 7 está em C: \ Users \ <username> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder

53

Aqui está o snippet que você pode usar para obter a localização do arquivo user.config de maneira programática:

public static string GetDefaultExeConfigPath(ConfigurationUserLevel userLevel)
{
  try
  {
    var UserConfig = ConfigurationManager.OpenExeConfiguration(userLevel);
    return UserConfig.FilePath;
  }
  catch (ConfigurationException e)
  {
    return e.Filename;
  }
}

ApplicationSettings (ou seja, settings.settings) usa PerUserRoamingAndLocal para as configurações do usuário por padrão (como me lembrei).

Atualização: Estranho, mas há muitas respostas incorretas aqui. Se você estiver procurando por seu arquivo de configurações com escopo de usuário (user.config), ele estará localizado na seguinte pasta (para Windows XP):

C: \ Documents and Settings \ (nome de usuário) \ Local Settings \ Application Data \ (company-name-if-exist) \ (app-name) .exe_ (Url | StrongName) _ (hash) \ (app-version) \

Url ou StrongName depende do seu nome forte do assembly do aplicativo ou não.


Alguma ideia do que contribui para o hash nesse caminho? Cada versão subsequente do meu aplicativo está obtendo um valor de hash diferente, o que torna a chamada de ApplicationSettingsBase.Upgrade () inútil. : /
Mal Ross

2
Hash é o hash SHA1 de StrongName quando o aplicativo é assinado ou o caminho quando o aplicativo não está assinado. Mais aqui msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
árbitro

20

Supondo que você esteja falando sobre desktop e não aplicativos da web:

Quando você adiciona configurações a um projeto, o VS cria um arquivo nomeado app.configno diretório do projeto e armazena as configurações nesse arquivo. Ele também cria o Settings.csarquivo que fornece os acessadores estáticos para as configurações individuais.

No momento da compilação, o VS irá (por padrão; você pode alterar isso) copiar o app.configpara o diretório de construção, alterando seu nome para corresponder ao executável (por exemplo, se o seu executável for nomeado foo.exe, o arquivo será nomeado foo.exe.config), que é o nome do. O gerenciador de configuração NET procura quando recupera as configurações em tempo de execução.

Se você alterar uma configuração por meio do editor de configurações do VS, ele atualizará app.confige Settings.cs. (Se você observar os acessadores de propriedade no código gerado no Settings.cs, verá que eles estão marcados com um atributo contendo o valor padrão da configuração que está em seu app.configarquivo.) Se você alterar uma configuração editando o app.configarquivo diretamente, Settings.csnão será atualizado, mas o novo valor ainda será usado por seu programa quando você executá-lo, porque app.configé copiado foo.exe.configem tempo de compilação. Se você desligar isso (definindo as propriedades do arquivo), você pode alterar uma configuração editando diretamente o foo.exe.configarquivo no diretório de compilação.

Depois, há configurações de escopo do usuário.

As configurações do escopo do aplicativo são somente leitura. Seu programa pode modificar e salvar configurações de escopo do usuário, permitindo que cada usuário tenha suas próprias configurações. Essas configurações não são armazenadas no foo.exe.configarquivo (já que no Vista, pelo menos, os programas não podem gravar em nenhum subdiretório ou Program Filessem elevação); eles são armazenados em um arquivo de configuração no diretório de dados do aplicativo do usuário.

O caminho para esse arquivo é %appdata%\%publisher_name%\%program_name%\%version%\user.config, por exemplo C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config. Observe que se você deu ao seu programa um nome forte, o nome forte será anexado ao nome do programa neste caminho.


1
Parece que o componente My_Company do caminho será o padrão da Microsoft. Ainda não encontrei uma maneira de mudar isso que realmente funcione, se alguém souber, seria bom adicionar.

1
user565869, você já tentou no Visual Studio, abra a guia do aplicativo de propriedade do projeto, clique no botão de informações de montagem e você deverá então ser capaz de mudar de empresa? repita isso para cada projeto em sua solução
gg89 01 de

15

Ao navegar para descobrir o hash no nome da pasta, descobri (por meio desta resposta ):

http://blogs.msdn.com/b/rprabhu/archive/2005/06/29/433979.aspx

(editar: link Wayback Machine: https://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/433979.aspx )

O caminho exato dos user.configarquivos é semelhante a este:

<Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config

Onde

<Profile Directory>- é o diretório do perfil móvel ou local. As configurações são armazenadas por padrão no user.configarquivo local . Para armazenar uma configuração no user.configarquivo de roaming , você precisa marcar a configuração com SettingsManageabilityAttributecom SettingsManageabilitydefinido como Roaming.

<Company Name>- é tipicamente a string especificada pelo AssemblyCompanyAttribute(com a ressalva de que a string é escapada e truncada conforme necessário e, se não for especificada na montagem, temos um procedimento de fallback).

<App Name>- é normalmente a string especificada pelo AssemblyProductAttribute(mesmas ressalvas que para o nome da empresa).

<Evidence Type>e <Evidence Hash>- informações derivadas da evidência de domínio de aplicativo para fornecer domínio de aplicativo adequado e isolamento de assembly.

<Version>- normalmente a versão especificada no AssemblyVersionAttribute. Isso é necessário para isolar diferentes versões do aplicativo implantado lado a lado.

O nome do arquivo é sempre simplesmente ' user.config'.


Infelizmente, o link do blog está quebrado. Tenho certeza que teria sido interessante.
UweBaemayr

3

Ele está em uma pasta com o nome do seu aplicativo na pasta Application Data na pasta home do usuário (C: \ documents and settings \ user no xp e c: \ users \ user no Windows Vista).

Existem algumas informações aqui também.

PS: - tente acessá-lo por% appdata% na caixa de execução!


2

Erm, você não pode simplesmente usar Settings.Default.Reset () para restaurar suas configurações padrão?


1

Todas as suas configurações são armazenadas no respectivo arquivo .config.

O arquivo .settings simplesmente fornece uma classe fortemente tipada para um conjunto de configurações que pertencem juntas, mas as configurações reais são armazenadas em app.config ou um arquivo .config em seu aplicativo.

Se você adicionar um arquivo .settings, um app.config será adicionado automaticamente para abrigar as configurações se você ainda não tiver um.


1

Se o seu arquivo de configurações estiver em um aplicativo da web, eles estarão no arquivo web.config (logo abaixo do seu projeto. Se eles estiverem em qualquer outro tipo de projeto, eles estarão no arquivo app.config (também abaixo do seu projeto) .

Editar

Como é apontado nos comentários: as configurações do aplicativo em tempo de design estão em um arquivo app.config para aplicativos que não sejam da web. Quando você constrói, o arquivo app.config é copiado para o diretório de saída e será nomeado yourexename .exe.config. Em tempo de execução, apenas o arquivo chamado yourexename.exe.config será lido.


1
Incorreto. Não há arquivo de configurações app.config no aplicativo em execução, porque app.config será renomeado para [appname] .exe.config. E, de qualquer forma, este arquivo conterá apenas as configurações ApplicationScoped de settings.settins.
árbitro

@arbiter: Talvez eu não tenha entendido a pergunta, mas Adam parecia estar perguntando sobre os padrões de tempo de design. Esses são armazenados em app.config. No momento da construção, o arquivo app.config é copiado para o diretório de construção e renomeado para (theapp.exe.config). No entanto, se você editar esse arquivo diretamente (e estiver trabalhando no Visual Studio), você corre o risco de o conteúdo ser sobrescrito na próxima vez que você construir. Resumindo: para um aplicativo implantado (ou se você estiver executando fora do IDE), altere o arquivo name.exe.config). Se você estiver trabalhando no VS, altere o valor padrão nas configurações ou app.config
JMarsch

0

Dois arquivos: 1) Um arquivo app.config ou web.config. As configurações dela podem ser personalizadas após construir com um editor de texto. 2) O arquivo settings.designer.cs. Este arquivo tem código gerado automaticamente para carregar a configuração do arquivo de configuração, mas um valor padrão também está presente caso o arquivo de configuração não tenha a configuração específica.


0

Eu sei que já foi respondido, mas você não poderia simplesmente sincronizar as configurações no designer de configurações para voltar às configurações padrão?

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.