Generische Methode für das Lesen von config-Abschnitte
Versuche zur Umsetzung einer generische Weise für das Lesen von Abschnitten aus einer config-Datei. Die config-Datei enthält einen "standard" - Teile oder 'custom' - Abschnitte, wie unten beschrieben.
<configuration>
<configSections>
<section name="NoteSettings" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
<appSettings>
<add key="AutoStart" value="true"/>
<add key="Font" value="Verdana"/>
</appSettings>
<NoteSettings>
<add key="Height" value="100"/>
<add key="Width" value="200"/>
</NoteSettings>
Die Methode, die ich versucht habe, ist wie folgt :
private string ReadAllSections()
{
StringBuilder configSettings = new StringBuilder();
Configuration configFile = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
foreach (ConfigurationSection section in configFile.Sections)
{
configSettings.Append(section.SectionInformation.Name);
configSettings.Append(Environment.NewLine);
if (section.GetType() == typeof(DefaultSection))
{
NameValueCollection sectionSettings = ConfigurationManager.GetSection(section.SectionInformation.Name) as NameValueCollection;
if (sectionSettings != null)
{
foreach (string key in sectionSettings)
{
configSettings.Append(key);
configSettings.Append(" : ");
configSettings.Append(sectionSettings[key]);
configSettings.Append(Environment.NewLine);
}
}
}
configSettings.Append(Environment.NewLine);
}
return configSettings.ToString();
}
Unter der Annahme, dass alle benutzerdefinierten Abschnitten wird nur der SCHLÜSSEL-WERT -
- Ist so eine Umsetzung möglich? Und wenn ja, ist es ein 'sauberer' und elegantere Lösung als diese?
- Der oben beschriebenen Methode liest auch 'unsichtbar' Abschnitte wie mscorlib, system.Diagnostik. Ist dieser vermeidbar?
- System.Daten.Dataset gibt einen dataset zurück, die nicht Stimmen, um eine NameValueCollection. Wie können diese behandelt werden?
Korrekturen/Vorschläge willkommen.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da die Konfiguration-Datei ist die XML-Datei, die Sie verwenden können XPath-Abfragen für diese Aufgabe:
Wenn Sie brauchen, um alle {key, value} - pair-Mädchen, dann müssen Sie definieren, Drillinge von XPath-Abfragen:
1 - main-Abfrage für das auswählen von Knoten mit ähnlicher Struktur. 2, 3 - Abfragen zum extrahieren von Schlüssel-Wert-Knoten von Knoten abgerufen, die von der ersten Abfrage. In Ihrem Fall ist es genug, um gemeinsame Abfrage aller Knoten, aber es ist leicht zu pflegen-Unterstützung für verschiedene benutzerdefinierte Bereiche.
Lesen deiner config in ein XmlDocument dann XPath verwenden, um zu finden die Elemente Sie suchen?
Etwas wie;
...
Lesen Sie einen benutzerdefinierten Abschnitt wie folgt:
Wenn Sie angegeben habe
NameValueSectionHandler
als das type-Attribut für einen Abschnitt und rufenConfiguration.GetSection(string)
erhalten Sie eineDefaultSection
Instanz als return-type.string SectionInformation.SectionInformation.GetRawXml()
ist der Schlüssel in diesem Fall kommen Sie in Ihre Daten.Ich antwortete auf eine ähnliche Frage mit einem gültigen Weg, es zu tun mit
System.Configuration
die Sie verweisen können, um alle details und ein code-snippet.NameValueSectionHandler kann ich diesem Abschnitt geben, die für das schreiben zurück zu der app