lettura dal file app.config


131

Sto provando a leggere StartingMonthColumn e CategoryHeadingColumn dal seguente file app.config usando il codice

ConfigurationSettings.AppSettings["StartingMonthColumn"]

ma restituisce null, anche ConfigurationSettings.AppSettings.Count restituisce zero

Per favore aiutatemi a leggere questo nella mia applicazione 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>

Stai cercando di eseguire l'app dalla cartella \ bin \ debug mentre stai modificando il file di configurazione nella radice del progetto? In caso contrario, modificare la configurazione e ricostruire il codice dopo aver eseguito una pulizia.
Kangkan

1
Il file non si chiama "app.config" giusto? È chiamato così nel tuo progetto, ma nella directory di output dell'applicazione, dovrebbe essere chiamato come il tuo binario di output + ".config" (quindi come "MyLibrary.dll.config" o "MyProgram.exe.config ", ecc ...)
BrainSlugs83

@ BrianSlugs83 grazie amico, mi chiedevo perché la mia app si bloccasse. Ora, dopo due giorni di ricerche ovunque, la risposta è qui nel commento. Ho appena avuto "app.config" e non "MyProgram.exe.config".
śmiglidigli,

Consulta stackoverflow.com/questions/1189364/… per la soluzione. Grazie
Ariful Islam,

Risposte:


171

Impostazioni di configurazione .AppSettings è obsoleto , è necessario utilizzare Configuration Manager .AppSettings (sarà necessario aggiungere un riferimento a System.Configuration )

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

Se hai ancora problemi a leggere nelle impostazioni della tua app, controlla che il tuo app.configfile sia nominato correttamente. In particolare, dovrebbe essere nominato in base all'assembly in esecuzione cioè MyApp.exe.config, e dovrebbe risiedere nella stessa directory di MyApp.exe.


2
Se ConfigurationSettings.AppSettings ["StartingMonthColumn"] restituisce null o una stringa vuota, sospetto che Int32.Parse genererà un'eccezione nel tentativo di analizzare tali valori.
Bittercoder

@bittercoder, sì, tuttavia, il file app.config dovrebbe sempre avere la configurazione corretta comunque. Se l'OP vuole aggiungere una qualche forma di gestione, ad esempio TryParse, allora può farlo . Tuttavia, questa non era la domanda.
James,

2
Si noti che è anche possibile accedere alle versioni con caratteri forti dei valori, tramite Settings.Default. * (Ovvero, in questo caso sarebbe Settings.Default.StartingMonthColumn).
BrainSlugs83,

@ BrainSlugs83 Nota che stai ottenendo confuse impostazioni utente con le impostazioni dell'app. Se si desidera un accesso fortemente tipizzato alle impostazioni dell'app, è necessario implementare una Sezione di configurazione
James,

Non è corretto, estrarrà i valori da app.config indipendentemente dal fatto che i valori siano impostati su "Utente" o "Applicazione" (dal progettista della GUI, è possibile scegliere l'ambito per ciascuna impostazione).
BrainSlugs83,

20

Solo per riferimento futuro, devi solo aggiungere System.Configurationalla tua libreria di riferimenti:

inserisci qui la descrizione dell'immagine


2
la tua risposta è migliore della prima risposta qui, tutti hanno dimenticato di dire che devi aggiungere un riferimento
essanousy

19

ConfigurationSettings.AppSettings è obsoleto , vedi qui:

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

Detto questo, dovrebbe ancora funzionare.

Solo un suggerimento, ma hai confermato che la configurazione dell'applicazione è quella utilizzata dal tuo eseguibile?

Prova a collegare un debugger e verifica il seguente valore:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

E quindi aprire il file di configurazione e verificare che la sezione sia lì come previsto.


Ciao Bittercoder quando provo a ottenere il valore per AppDomain.CurrentDomain.SetupInformation.ConfigurationFile ottengo C: \\ Programmi \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config che non è il mio file di configurazione ... cosa dovrei lo faccio
Sathish

Questo è il file di configurazione corretto ... potrebbe essere che non te lo aspettassi. In questo caso, infatti, credo che C: \ Programmi \ Microsoft Office \ OFFICE11 \ Excel.EXE.config sia la configurazione globale e se si inserisce un nome simile Excel.EXE.config nella stessa directory dell'assembly, questo è da dove verranno lette le impostazioni dell'app. Vedere questi link per i dettagli: dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575/...
Bittercoder


7

Questo:

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

funziona bene per me.

Nota che si ConfigurationManagertrova nello System.Configurationspazio dei nomi (quindi probabilmente vorrai using System.Configuration;un'istruzione) e che poiché ciò che leggi ha un tipo di stringa dovrai analizzare ciò che leggi per usarlo come numero.

Inoltre, assicurati di impostare system.configuration.dllcome riferimento nel tuo progetto o script di compilazione.


qual è il riferimento che dovrebbe essere aggiunto per ottenere ConfigurationManager.Appsettings che uso .Net 2.0 Framework
Sathish

1
Hai bisogno di un riferimento a System.Configuration.dll. La ConfigurationManagerclasse è stata aggiunta in .NET 2.0, quindi dovresti essere OK.
Michael Burr

7

Il motivo è semplice, la tua chiamata a ConfigurationSettings.AppSettingsnon sta restituendo il file di configurazione richiesto. Prova uno dei seguenti modi:

  • Assicurati che la configurazione dell'app abbia lo stesso nome del file exe dell'applicazione, con l'estensione .config aggiunta, ad esempio MyApp.exe.config
  • O puoi usare ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

Spero che questo ti aiuti


3

Prova a ricostruire il tuo progetto: copia il contenuto di App.config"<YourProjectName.exe> ​​.config" nella libreria di build.


2

Aggiungere anche la chiave "StartingMonthColumn" in App.config da cui si esegue l'applicazione, ad esempio in App.config del progetto di test.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.