Maneira mais simples de ter um arquivo de configuração em um aplicativo Windows Forms C #


88

Sou muito novo no .NET e ainda não entendi como funcionam os arquivos de configuração.

Sempre que procuro no Google sobre isso, obtenho resultados sobre web.config, mas estou escrevendo um aplicativo Windows Forms.

Eu descobri que preciso usar o namespace System.Configuration, mas a documentação não está ajudando.

Como posso definir que meu arquivo de configuração é XYZ.xml? Ou tem um nome "padrão" para o arquivo de configuração? Eu ainda não entendi.

Além disso, como faço para definir uma nova seção? Eu realmente preciso criar uma classe que herda de ConfigurationSection?

Eu gostaria de ter apenas um arquivo de configuração com alguns valores como este:

<MyCustomValue>1</MyCustomValue>
<MyCustomPath>C:\Some\Path\Here</MyCustomPath>

Existe uma maneira simples de fazer isso? Você pode explicar de uma maneira simples como ler e escrever de / para um arquivo de configuração simples?


1
Qual é a sua versão do .NET? Para 2.0 e superior, existe uma maneira muito bonita chamada Configurações.
Thomas,

1
@Seven foi um erro de digitação, mas pode significar "Explique com um exemplo" :)
Fabio Gomes

Respostas:


121

Você deseja usar um App.Config.

Quando você adiciona um novo item a um projeto, há algo chamado arquivo de configuração de aplicativos. Adicione isso.

Em seguida, você adiciona chaves na seção de configuração / configurações de aplicativos

Gostar:

<configuration>
 <appSettings>
  <add key="MyKey" value="false"/>

Acesse os membros fazendo

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

Isso funciona no .NET 2 e superior.


2
Na verdade, ele funciona em todas as versões do .NET, a partir da v1.0. A nova classe no .NET 2.0 é ConfigurationManager.
Mike Dimmick,

4
Eu, pessoalmente, uso a guia "Configurações" nas "Propriedades do aplicativo" (somente Framework 2.0 em diante) porque o Visual Studio cria propriedades de tipo forte para suas configurações. Eles também podem incluir configurações de "Usuário" que são lidas / gravadas em tempo de execução.
Adrian Clark

@Mike sim, eu tinha a sensação de que era o caso, mas não tinha certeza. Eu não trabalhei muito com 1.
qui

26
Observe que o ConfigurationSettingsé obsoleto, use System.Configuration.ConfigurationManager.AppSettings["MyKey"];.
JNF

16
Também uma observação, para usar System.Configuration.ConfigurationManagerseu projeto precisa de uma referência aSystem.Configuration.dll
dmeglio

66

Esclarecimento das respostas anteriores ...

  1. Adicione um novo arquivo ao seu projeto ( AdicionarNovo ItemArquivo de Configuração do Aplicativo )

  2. O novo arquivo de configuração aparecerá no Solution Explorer como App.Config .

  3. Adicione suas configurações a este arquivo usando o seguinte como modelo

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
  4. Recupere-os assim:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
  5. Quando construída, sua pasta de saída conterá um arquivo chamado <assemblyname> .exe.config. Esta será uma cópia do arquivo App.Config . Nenhum trabalho adicional deve ser feito pelo desenvolvedor para criar este arquivo.


1
Isso foi útil para mim. Dois outros pontos: Ao adicionar o novo arquivo ao projeto, o Arquivo de configuração do aplicativo foi encontrado quando cliquei no nó Geral no lado esquerdo da caixa de diálogo. Para usar a classe ConfigurationManager em meu código, tive que adicionar a DLL System.Configuration às minhas referências.
John Gilmer

28

Com uma leitura rápida das respostas anteriores, elas parecem corretas, mas não parece que alguém mencionou os novos recursos de configuração do Visual Studio 2008. Ele ainda usa app.config (copiado no momento da compilação para YourAppName.exe.config), mas há um widget de IU para definir propriedades e especificar seus tipos. Clique duas vezes em Settings.settings em na pasta "Propriedades" do seu projeto.

A melhor parte é que o acesso a essa propriedade a partir do código é seguro para tipos - o compilador detectará erros óbvios, como digitar incorretamente o nome da propriedade. Por exemplo, uma propriedade chamada MyConnectionString em app.config seria acessada como:

string s = Properties.Settings.Default.MyConnectionString;

Isso estava disponível no VS2005.
Greg D

5
Legal, mas (Propriedades do projeto | Configurações) gera código que deve ser compilado. Se você quiser alterar uma configuração, precisará liberar novos binários para o cliente.
JohnL4

@ JohnL4 se essas configurações estiverem no escopo "usuário", você pode alterá-las programaticamente, por exemploSettings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits

10

Você deve criar um arquivo App.config (muito semelhante ao web.config ).

Você deve clicar com o botão direito no seu projeto, adicionar um novo item e escolher um novo "Arquivo de configuração do aplicativo" .

Certifique-se de adicionar usando System.Configuration em seu projeto.

Então você pode adicionar valores a ele:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="setting1" value="key"/>
  </appSettings>
  <connectionStrings>
    <add name="prod" connectionString="YourConnectionString"/>
  </connectionStrings>
</configuration>

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }

Apenas uma observação: de acordo com a Microsoft , você deve usar o ConfigurationManager em vez de ConfigurationSettings (consulte a seção de comentários):

"A classe ConfigurationSettings fornece compatibilidade com versões anteriores apenas. Para novos aplicativos, você deve usar a classe ConfigurationManager ou a classe WebConfigurationManager."


Muito útil. Resolvi meu problema para o T.
JCMorris

No Visual Studio 2015: Clique em Projeto> Adicionar Referência. Role para baixo até a metade para encontrar System.Configuration Clique em OK e atualize a linha de código de acordo com o comentário de Nathan.
Robot70

7

O nome padrão para um arquivo de configuração é [yourexe] .exe.config. Portanto, notepad.exe terá um arquivo de configuração denominado notepad.exe.config, na mesma pasta do programa. Este é um arquivo de configuração geral para todos os aspectos do CLR e do Framework, mas pode conter suas próprias configurações em um<appSettings> nó.

O <appSettings>elemento cria uma coleção de pares nome-valor que podem ser acessados ​​comoSystem.Configuration.ConfigurationSettings.AppSettings . Entretanto, não há como salvar as alterações no arquivo de configuração.

Também é possível adicionar seus próprios elementos personalizados a um arquivo de configuração - por exemplo, para definir uma configuração estruturada - criando uma classe que implementa IConfigurationSectionHandlere adicionando-a ao <configSections>elemento do arquivo de configuração. Você pode acessá-lo chamando ConfigurationSettings.GetConfig.

.NET 2.0 adiciona uma nova classe, System.Configuration.ConfigurationManager que oferece suporte a vários arquivos, com substituições por usuário de dados por sistema. Ele também suporta salvar configurações modificadas de volta aos arquivos de configurações.

O Visual Studio cria um arquivo chamado App.config, que ele copia para a pasta EXE, com o nome correto, quando o projeto é construído.



3

No Windows Forms, você tem o app.configarquivo, que é muito parecido com o web.configarquivo. Mas como vejo que você precisa de valores personalizados, sugiro o uso de Configurações .

Para fazer isso, abra as propriedades do projeto e vá para as configurações. Se não existir um arquivo de configurações, você terá um link para criá-lo. Em seguida, você pode adicionar as configurações à tabela que vê lá, o que geraria o XML apropriado e uma classe Settings que pode ser usada para carregar e salvar as configurações.

A classe de configurações terá um nome semelhante a DefaultNamespace.Properties.Settings. Então, você pode usar um código semelhante a:

using DefaultNamespace.Properties;

namespace DefaultNamespace {
    class Class {
        public int LoadMySettingValue() {
            return Settings.Default.MySettingValue;
        }
        public void SaveMySettingValue(int value) {
            Settings.Default.MySettingValue = value;
        }
    }
}

2

Eu concordo com as outras respostas que apontam para app.config. No entanto, em vez de ler valores diretamente de app.config, você deve criar uma classe de utilitário (AppSettings é o nome que uso) para lê-los e expô-los como propriedades. A classe AppSettings pode ser usada para agregar configurações de vários armazenamentos, como valores de app.config e informações de versão do aplicativo do assembly (AssemblyVersion e AssemblyFileVersion).



1

Usar:

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

AppSettings foi preterido e agora é considerado obsoleto ( link ).

Além disso, a seção appSettings do app.config foi substituída por applicationSettings seção .

Como outra pessoa mencionou, você deve usar System.Configuration.ConfigurationManager ( link ), que é novo para .NET 2.0.


ConfigurationSettings está obsoleto, não AppSettings.
Toby

0

Qual versão do .NET e Visual Studio você está usando?

Ao criar o novo projeto, você deve ter um arquivo em sua solução chamado app.config . Esse é o arquivo de configuração 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.