lendo do arquivo app.config


131

Estou tentando ler StartingMonthColumn e CategoryHeadingColumn no arquivo app.config abaixo usando o código

ConfigurationSettings.AppSettings["StartingMonthColumn"]

mas está retornando nulo, também ConfigurationSettings.AppSettings.Count retorna zero

Por favor me ajude a ler isso no meu aplicativo windows

<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="CTARepository.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <CTARepository.Properties.Settings>
            <setting name="Setting" serializeAs="String">
                <value />
            </setting>
        </CTARepository.Properties.Settings>
    </userSettings>
    <appSettings>
        <add key="StartingMonthColumn" value="7"/>
        <add key="CategoryHeadingColumn" value="1"/>
    </appSettings>
</configuration>

Você está tentando executar o aplicativo a partir da pasta \ bin \ debug enquanto altera o arquivo de configuração na raiz do projeto? Caso contrário, altere a configuração e reconstrua o código após executar uma limpeza.
Kangkan

1
O arquivo não está nomeado "app.config", certo? É nomeado isso em seu projeto, com certeza, mas no diretório de saída do aplicativo, ele deve ser nomeado da mesma forma que seu binário de saída + ".config" (como "MyLibrary.dll.config" ou "MyProgram.exe.config ", etc ...)
BrainSlugs83 12/09

@ BrianSlugs83 obrigado amigo, eu queria saber por que meu aplicativo falha. Agora, após dois dias de pesquisa em todos os lugares, a resposta está aqui no comentário. Eu só tinha "app.config" e não "MyProgram.exe.config".
Mmiglidigli 02/07

Consulte stackoverflow.com/questions/1189364/… para obter solução. Obrigado
Ariful Islam

Respostas:


171

Definições de configuração .AppSettings está obsoleto , você deve usar o Gerenciador de Configurações .AppSettings (será necessário adicionar uma referência a System.Configuration )

int value = Int32.Parse(ConfigurationManager.AppSettings["StartingMonthColumn"]);

Se você ainda tiver problemas para ler as configurações do aplicativo, verifique se o seu app.configarquivo está nomeado corretamente. Especificamente, ele deve ser nomeado de acordo com o assembly em execução, ou seja MyApp.exe.config, e deve residir no mesmo diretório que MyApp.exe.


2
Se ConfigurationSettings.AppSettings ["StartingMonthColumn"] retornar nulo ou uma sequência vazia, eu suspeitaria que Int32.Parse lançará uma exceção ao tentar analisar esses valores.
Bittercoder

@bittercoder, sim, no entanto, seu arquivo app.config sempre deve ter a configuração correta de qualquer maneira. Se o OP quiser adicionar alguma forma de manipulação, ou seja, TryParse , por todos os meios possíveis. No entanto, essa não era a questão.
James James

2
Observe que você também pode obter acesso às versões de tipos fortes dos valores, via Settings.Default. * (Ou seja, nesse caso, seria Settings.Default.StartingMonthColumn).
precisa saber é o seguinte

@ BrainSlugs83 Observe que você está confundindo as configurações do usuário com as configurações do aplicativo. Se você deseja acessar fortemente tipado para configurações de aplicativos que você precisa para implementar um personalizado ConfigurationSection
James

Isso não está correto, ele extrairá valores do app.config, independentemente de os valores terem o escopo definido como "Usuário" ou "Aplicativo" (do designer da GUI, você pode escolher o escopo para cada configuração).
BrainSlugs83

20

Apenas para referência futura, você só precisa adicionar System.Configurationà sua biblioteca de referências:

insira a descrição da imagem aqui


2
sua resposta é melhor do que a primeira resposta aqui, todo mundo esqueceu-se de dizer que você tem que adicionar uma referência
essanousy

19

ConfigurationSettings.AppSettings está obsoleto , veja aqui:

http://msdn.microsoft.com/en-us/library/system.configuration.configurationsettings.appsettings.aspx

Dito isto, ainda deve funcionar.

Apenas uma sugestão, mas você confirmou que a configuração do aplicativo é a que o executável está usando?

Tente anexar um depurador e verifique o seguinte valor:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

E, em seguida, abra o arquivo de configuração e verifique a seção, conforme o esperado.


Oi Bittercoder quando tento obter o valor de AppDomain.CurrentDomain.SetupInformation.ConfigurationFile, recebo C: \\ Arquivos de Programas \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config que não é o meu arquivo de configuração ... o que deve eu faço
Sathish

Esse é o arquivo de configuração correto ... pode ser que você não o estivesse esperando. De fato, neste caso, acredito que C: \ Arquivos de Programas \ Microsoft Office \ OFFICE11 \ Excel.EXE.config seja a configuração global e, se você colocar um nome semelhante a Excel.EXE.config no mesmo diretório que o seu assembly, será de onde as configurações do seu aplicativo serão lidas. Consulte estes links para obter detalhes: dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575/…
Bittercoder


7

Este:

Console.WriteLine( "StartingMonthColumn is {0}", ConfigurationManager.AppSettings["StartingMonthColumn"]);

funciona bem para mim.

Observe que ConfigurationManagerestá no System.Configurationespaço para nome (então você provavelmente desejará uma using System.Configuration;declaração) e que, como o que você lê tem um tipo de string, você precisa analisar o que lê para usá-lo como um número.

Além disso, certifique-se de definir system.configuration.dllcomo referência em seu projeto ou criar script.


o que é a referência que deve ser adicionado para obter ConfigurationManager.AppSettings eu uso .Net 2.0 Framework
Sathish

1
Você precisa de uma referência System.Configuration.dll. A ConfigurationManagerclasse foi adicionada no .NET 2.0, então você deve estar bem.
Michael Burr

7

O motivo é simples, sua chamada para ConfigurationSettings.AppSettingsnão está retornando o arquivo de configuração necessário. Tente uma das seguintes maneiras:

  • Verifique se a configuração do seu aplicativo tem o mesmo nome que o arquivo exe do seu aplicativo - com a extensão .config anexada, por exemplo, MyApp.exe.config
  • OU você pode usar ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

Espero que isto ajude


3

Tente reconstruir seu projeto - ele copia o conteúdo de App.config"<YourProjectName.exe> ​​.config" na biblioteca de compilação.


2

Adicione também a chave "StartingMonthColumn" no App.config a partir do qual você executa o aplicativo, por exemplo, no App.config do projeto de teste.

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.