C#修改*.exe.config配置文件已经搞定,不知道有没有刷新缓存中的配置文件的方法,求大神解答

这是我现在用的方法,感觉挺麻烦的,不知道各位大神有没更好的方法,找到了一个读取的方法,就是加载config文件然后读取,但是感觉不好,不能用ConfigurationManager.ConnectionStrings[“connectionString”]读取
public void saveAPPCONFIG(string skeyname, string skeyvalue)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(_configPath);
XmlNode xConfiguration = xmldoc["configuration"];

if (xConfiguration["connectionStrings"] == null)
{
XmlNode xConnectionStrings = xmldoc.CreateElement("connectionStrings");
xConfiguration.AppendChild(xConnectionStrings); //向configuration添加connectionStrings节点
XmlNode xConnectionString = xmldoc.CreateElement("add");
XmlAttribute xmlAttrName;
xmlAttrName = xmldoc.CreateAttribute("name");
xmlAttrName.Value = skeyname;
XmlAttribute xmlAttrConnectionString;
xmlAttrConnectionString = xmldoc.CreateAttribute("connectionString");
xmlAttrConnectionString.Value = skeyvalue;
xConnectionString.Attributes.SetNamedItem(xmlAttrName);
xConnectionString.Attributes.SetNamedItem(xmlAttrConnectionString);
xConnectionStrings.AppendChild(xConnectionString);//向xConnectionStrings添加xConnectionString节点
}
xmldoc.Save(_configPath);
}

private static void UpdateAppConfig(string newKey, string newValue)
{
    bool isModified = false;
    foreach (string key in ConfigurationManager.AppSettings)
    {
        if (key == newKey)
        {
            isModified = true;
        }
    }
    // Open App.Config of executable
    Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    // You need to remove the old settings object before you can replace it
    if (isModified)
    {
        config.AppSettings.Settings.Remove(newKey);
    }
    // Add an Application Setting.
    config.AppSettings.Settings.Add(newKey, newValue);
    // Save the changes in App.config file.
    config.Save(ConfigurationSaveMode.Modified);
    // Force a reload of a changed section.
    ConfigurationManager.RefreshSection("appSettings");
}

 之后直接用ConfigurationManager.AppSettings[key]读取就行了。

追问

这个是修改*.vshost.exe.config的,但是ConfigurationManager读取的是exe.config的,这个我早就试过了,不知道修改*.vshost.exe.config有什么用,一百度全是这个

追答

vshost那个文件是VS里调试用的,你用上面的代码,然后直接运行你生成出来的exe就能看到exe.config的更改了。

追问

好吧,刚试了下确实是这样,之前一直是在VS里运行,好心塞,非常感谢,还想问下这个怎么做到不重启就能读取最新的配置呢?

追答

直接运行exe后,调用上面的UpdateAppConfig,应该不需要重启的,可以直接用ConfigurationManager.AppSettings来读改动后的值。

追问

ConfigurationManager.RefreshSection("appSettings");
这段代码不起作用

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答