2012-05-18 3 views
13

ich eine app.config-Datei, die wie folgt aussieht:Was ist falsch an meiner app.config-Datei?

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="TestKey" value="TestValue" /> 
    </appSettings> 
    <newSection> 
    </newSection> 
</configuration> 

Und ich versuche, es auf diese Weise zu nutzen:

System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap(@"C:\app.config"); 
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap); 

Allerdings scheint es nicht zu funktionieren . Wenn ich direkt nach dem Einlesen der Datei den Debugger aktiviere, und ich versuche, configuration.AppSettings zu betrachten, bekomme ich einen 'configuration.AppSettings' threw an exception of type 'System.InvalidCastException'.

Ich bin sicher, ich lese die Datei, denn wenn ich auf Konfiguration.Sektionen ["newSection"] Ich bin eine leere {System.Configuration.DefaultSection} (anstatt Null) zurückgegeben.

Ich vermute, ich habe etwas sehr grundlegendes falsch ... was ist los mit AppSettings?

Antwort

12

Sie verwenden eine falsche Funktion, um die app.config zu lesen. OpenMappedMachineConfiguration soll Ihre Datei machine.config öffnen, aber Sie öffnen eine typische application.exe.config-Datei. Der folgende Code liest Ihre app.config und gibt zurück, was Sie erwarten würden.

System.Configuration.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
    fileMap.ExeConfigFilename = @"C:\app.config"; 
    System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
    MessageBox.Show(configuration.AppSettings.Settings["TestKey"].Value); 
3

Ich denke, das 'newSection' Element verursacht das Problem. Sofern Sie nicht auch ein 'configSections' -Element hinzufügen, kann .NET es nicht deklarieren, um 'newSection' zu deklarieren.

Sie brauchen so etwas wie:

<configSections> 
    <section name="newSection" type="Fully.Qualified.TypeName.NewSection, 
    AssemblyName" /> 
</configSections> 

Im ersten Fall würde ich versuchen, das ‚newSection‘ Element zu entfernen, um zu sehen, ob dies die Situation verbessert.

This link erklärt über benutzerdefinierte Konfiguration Abschnitte.

+0

Leider ist das nicht wahr. Ich habe den newSection eingefügt, nur um sicherzustellen, dass ich die Datei wirklich geladen habe. Es zu entfernen macht keinen Unterschied. – Beska

3

Wenn Sie die Dokumentation auf MSDN auf die Funktion zu lesen versuchen, Sie zu verwenden:

OpenExeConfiguration MSDN

In der Art und Weise Sie es verwenden werden versuchen, die Konfiguration von app.config.exe zu finden. Wenn Sie von appSettings machen wollen, um sie zu der Konfiguration der Konfigurationsdatei aus Ihrer Anwendung hinzufügen und sie dann zugreifen, indem Sie den Konfigurationsmanager mit:

Using appsetting .net MSDN

+0

Das ist nicht allzu überraschend ... Ich hätte nicht gedacht, dass OpenExeConfiguration recht hat, aber da ich mit der anderen Option kein Glück hatte, dachte ich, ich würde es erkunden. Ich habe den Schnitt zu meiner Frage gelöscht, die wahrscheinlich nur mehr Verwirrung verursacht hat. – Beska

2

Jedes Mal habe ich einen Schlüssel verwendet in mein webconfig ich habe es wie

so getan
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <SectionGroup> 
     Section Stuff 
    </SectionGroup> 
    </configSections> 
<appsettings> 
    <add key="TestKey" value="TestValue" /> 
</appSettings> 
</configuration> 

ich verstehe nicht ganz, warum, aber es ist immer Fehler bei mir mit App-Einstellungen innerhalb von configsettings werfen würde.