Laden von benutzerdefinierten Konfigurationsdateien

118

Ich weiß, dass ich Konfigurationsdateien, die sich auf eine Assembly beziehen, mit der statischen ConfigurationManager.OpenExe(exePath)Methode öffnen kann, aber ich möchte nur eine Konfiguration öffnen, die sich nicht auf eine Assembly bezieht. Nur eine Standard-.NET-Konfigurationsdatei.

Adam
quelle

Antworten:

244

Die Artikel von Ricky sind sehr gut, aber leider beantworten sie Ihre Frage nicht.

Um Ihr Problem zu lösen, sollten Sie diesen Code ausprobieren:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

Wenn Sie auf einen Wert in der Konfiguration zugreifen müssen, können Sie den Indexoperator verwenden:

config.AppSettings.Settings["test"].Value;
Oliver
quelle
1
@Oliver Mit whateverYouLikeExtension, meinst du, dass du etwas danach haben musst ? config.
Svish
4
@Oliver Bin gekommen, um es jetzt zu versuchen, und scheint gut zu funktionieren ohne :)
Svish
1
Ich habe dies getan, aber wenn ich auf ConfigurationManager.ConnectionStrings zugreife, erhalte ich immer noch die alten Daten. Was vermisse ich?
MAW74656
1
@ MAW74656: Sie müssen nicht zugreifen ConfigurationManager.ConnectionStrings. Stattdessen müssen Sie den Wert aus dem configObjekt lesen, das von der letzten Anweisung oben zurückgegeben wurde.
Oliver
3
Für alle anderen, die danach suchen, wie sie die appSettings erhalten können: var foo = config.AppSettings.Settings ["test"]. Value;
Roro
8

Die Konfigurationsdatei ist nur eine XML-Datei. Sie können sie öffnen, indem Sie:

private static XmlDocument loadConfigDocument()
{
    XmlDocument doc = null;
    try
    {
        doc = new XmlDocument();
        doc.Load(getConfigFilePath());
        return doc;
    }
    catch (System.IO.FileNotFoundException e)
    {
        throw new Exception("No configuration file found.", e);
    }
    catch (Exception ex)
    {
        return null;
    }
}

und später Abrufen von Werten durch:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");
Otávio Décio
quelle
Nicht erreichbarer Code nach erkannt throw new Exception("No configuration file found.", e);.
Oybek
Ich werde die Rückgabe null entfernen, sie wird nicht wirklich erreicht.
Otávio Décio
7
Warum sollte man XML verwenden, wenn man so großartige Klassen aus der .Net-Bibliothek hat? Ich würde nicht empfehlen, dies zu verwenden, schlecht im Design. Was als nächstes? Implementieren Sie eine andere Zeichenfolgenklasse ... berücksichtigen Sie dies.
Yuki
@ OtávioDécio Kann ich system.diagnostics hinzufügen, um die Ablaufverfolgung in einer benutzerdefinierten .config-Datei zu aktivieren?
FaizanHussainRabbani
@FaizanRabbani nicht sicher über die benutzerdefinierte Ablaufverfolgung, aber laut msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx sollten Sie in der Lage sein, Diagnosen zur Konfigurationsdatei hinzuzufügen.
Otávio Décio