Lesen aus der Datei app.config


131

Ich versuche, StartingMonthColumn und CategoryHeadingColumn mit dem Code aus der folgenden Datei app.config zu lesen

ConfigurationSettings.AppSettings["StartingMonthColumn"]

Es wird jedoch null zurückgegeben. Auch ConfigurationSettings.AppSettings.Count gibt null zurück

Bitte helfen Sie mir, dies in meiner Windows-Anwendung zu lesen

<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>

Versuchen Sie, die App aus dem Ordner \ bin \ debug auszuführen, während Sie die Konfigurationsdatei im Stammverzeichnis des Projekts ändern? Andernfalls ändern Sie die Konfiguration und erstellen Sie den Code neu, nachdem Sie eine Bereinigung ausgeführt haben.
Kangkan

1
Die Datei heißt nicht "app.config", oder? Es heißt zwar in Ihrem Projekt, aber im Ausgabeverzeichnis der Anwendung sollte es den gleichen Namen haben wie Ihre Ausgabe-Binärdatei + ".config" (wie "MyLibrary.dll.config" oder "MyProgram.exe.config") ", etc ...)
BrainSlugs83

@ BrianSlugs83 danke Kumpel, ich habe mich gefragt, warum meine App abstürzt. Jetzt, nach zwei Tagen der Suche überall, ist die Antwort hier im Kommentar. Ich hatte gerade "app.config" und kein "MyProgram.exe.config".
śmiglidigli

Die Lösung finden Sie unter stackoverflow.com/questions/1189364/… . Danke
Ariful Islam

Antworten:


171

Konfigurationseinstellungen .AppSettings ist veraltet , sollten Sie Configuration Manager - .AppSettings statt (Sie werden einen Verweis hinzufügen müssen , um System.Configuration )

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

Wenn Sie weiterhin Probleme beim Lesen Ihrer App-Einstellungen haben, überprüfen Sie, ob Ihre app.configDatei korrekt benannt ist. Insbesondere sollte es nach der ausführenden Assembly benannt sein, dh MyApp.exe.configsich im selben Verzeichnis wie befinden MyApp.exe.


2
Wenn ConfigurationSettings.AppSettings ["StartingMonthColumn"] null oder eine leere Zeichenfolge zurückgibt, würde ich vermuten, dass Int32.Parse beim Versuch, diese Werte zu analysieren, eine Ausnahme auslöst.
Bittercoder

@bittercoder, ja, Ihre app.config-Datei sollte ohnehin immer die richtige Konfiguration haben. Wenn das OP dort irgendeine Form der Handhabung hinzufügen möchte, dh TryParse, dann können sie es auf jeden Fall. Dies war jedoch nicht die Frage.
James

2
Beachten Sie, dass Sie auch über Settings.Default. * Auf die stark typisierten Versionen der Werte zugreifen können (in diesem Fall wäre es Settings.Default.StartingMonthColumn).
BrainSlugs83

@ BrainSlugs83 Beachten Sie, dass Sie Benutzereinstellungen mit App-Einstellungen verwechseln . Wenn Sie einen stark typisierten Zugriff auf App-Einstellungen wünschen, müssen Sie einen benutzerdefinierten Konfigurationsabschnitt
James

Das ist nicht korrekt. Es werden Werte aus app.config abgerufen, unabhängig davon, ob die Werte auf "Benutzer" oder "Anwendung" festgelegt sind (im GUI-Designer können Sie den Bereich für jede Einstellung auswählen).
BrainSlugs83

20

Nur für die zukünftige Referenz müssen Sie nur System.ConfigurationIhre Referenzbibliothek hinzufügen :

Geben Sie hier die Bildbeschreibung ein


2
Ihre Antwort ist besser als die erste Antwort hier, jeder hat vergessen zu sagen, dass Sie eine Referenz hinzufügen müssen
essanousy

19

ConfigurationSettings.AppSettings ist veraltet , siehe hier:

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

Das heißt, es sollte immer noch funktionieren.

Nur ein Vorschlag, aber haben Sie bestätigt, dass Ihre Anwendungskonfiguration diejenige ist, die Ihre ausführbare Datei verwendet?

Fügen Sie einen Debugger hinzu und überprüfen Sie den folgenden Wert:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

Öffnen Sie dann die Konfigurationsdatei und überprüfen Sie den Abschnitt wie erwartet.


Hallo Bittercoder, wenn ich versuche, den Wert für AppDomain.CurrentDomain.SetupInformation.ConfigurationFile zu erhalten, erhalte ich C: \\ Programme \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config, was nicht meine Konfigurationsdatei ist ... was sollte Ich tue
Sathish

Das ist die richtige Konfigurationsdatei ... es kann sein, dass Sie es nicht erwartet haben. In diesem Fall glaube ich, dass C: \ Programme \ Microsoft Office \ OFFICE11 \ Excel.EXE.config die globale Konfiguration ist. Wenn Sie eine ähnlich benannte Excel.EXE.config im selben Verzeichnis wie Ihre Assembly ablegen, ist dies der Fall Hier werden Ihre App-Einstellungen gelesen. Siehe diese Links für Details: dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575/…
Bittercoder


7

Dies:

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

funktioniert gut für mich.

Beachten Sie, dass ConfigurationManagersich das im System.ConfigurationNamespace befindet (daher möchten Sie wahrscheinlich eine using System.Configuration;Anweisung). Da das, was Sie einlesen, einen Zeichenfolgentyp hat, müssen Sie das Gelesene analysieren, um es als Zahl zu verwenden.

Stellen Sie außerdem sicher, dass Sie system.configuration.dllin Ihrem Projekt oder Build-Skript eine Referenz festlegen .


Was ist die Referenz, die hinzugefügt werden sollte, um ConfigurationManager.Appsettings zu erhalten Ich verwende .Net 2.0 Framework
Sathish

1
Sie benötigen einen Verweis auf System.Configuration.dll. Die ConfigurationManagerKlasse wurde in .NET 2.0 hinzugefügt, daher sollten Sie in Ordnung sein.
Michael Burr

7

Der Grund ist einfach: Ihr Aufruf von ConfigurationSettings.AppSettingsgibt nicht die erforderliche Konfigurationsdatei zurück. Bitte versuchen Sie eine der folgenden Möglichkeiten:

  • Stellen Sie sicher, dass Ihre App-Konfiguration denselben Namen wie die exe-Datei Ihrer Anwendung hat - mit der angehängten Erweiterung .config, z. B. MyApp.exe.config
  • ODER Sie können verwenden ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

Hoffe das hilft


3

Versuchen Sie, Ihr Projekt neu App.configzu erstellen - Es kopiert den Inhalt von "<YourProjectName.exe> ​​.config" in der Build-Bibliothek.


2

Fügen Sie außerdem den Schlüssel "StartingMonthColumn" in App.config hinzu, von dem aus Sie die Anwendung ausführen, z. B. in der App.config des Testprojekts.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.