poniedziałek, 12 listopada 2012

Modify main Config file by data from another config file.


We need to add additional configuration to config file from outside config file (for example from plugin dll config file).

Plugin DLL (part of main application) return by using ConfigurationManager always config file from main application.

We need to update main config file by the setting from dll config file.
Additionality on the end of program (in Dipose method) we need to restore main config file to basic (by remove settings from plugin dll).

private static void ChangeConfigFile()
{
    string path = LoadDLLConfigFilePath();
 
 
    XmlNode nodeWCF;
 
    using (XmlReader reader = XmlReader.Create(path))
    {
        XmlDocument pluginConfig = new XmlDocument();
        pluginConfig.PreserveWhitespace = true; // keep xml formatting
        pluginConfig.Load(reader);
 
        XmlNamespaceManager xnm = new XmlNamespaceManager(pluginConfig.NameTable);
        nodeWCF = pluginConfig.DocumentElement.SelectSingleNode("system.serviceModel", xnm);
    }
 
    // plugin dll contains config file from main application
    System.Configuration.Configuration configFile = 
           ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

    string configFilePath = configFile.FilePath;
 
    XmlDocument serviceConfig = new XmlDocument();
    serviceConfig.PreserveWhitespace = true; // keep xml formatting
 
    using (XmlReader reader = XmlReader.Create(configFilePath))
    {                
        serviceConfig.Load(reader);
 
        XmlNamespaceManager xnm = new XmlNamespaceManager(serviceConfig.NameTable);
 
        XmlNode newNodeWCF = serviceConfig.ImportNode(nodeWCF, true);
 
        serviceConfig.DocumentElement.AppendChild(newNodeWCF);
 
    }
 
    using (XmlWriter writer = XmlWriter.Create(configFilePath))
    {
        serviceConfig.Save(writer);
    }
 
}



private static void RestoreServiceConfigFile()
{
    System.Configuration.Configuration configuration = 
           ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

    string configFilePath = configuration.FilePath;
 
    XmlDocument configFile;
 
    using (XmlReader reader = XmlReader.Create(configFilePath))
    {
        configFile = new XmlDocument();
        configFile.PreserveWhitespace = true;
        configFile.Load(reader);
 
        XmlNode nodeWCF = configFile.DocumentElement.SelectSingleNode("system.serviceModel");
 
        configFile.DocumentElement.RemoveChild(nodeWCF);
    }
 
    using (XmlWriter writer = XmlWriter.Create(configFilePath))
    {
        configFile.Save(writer);
    }
}

Brak komentarzy:

Prześlij komentarz