2

我有以下内容,但对我不起作用:

  static void SaveVersion(string configFile, string Version) 
  {
            XmlDocument config = new XmlDocument();
            config.Load(configFile);

            XmlNode appSettings = config.SelectSingleNode("configuration/appSettings");
            XmlNodeList appKids = appSettings.ChildNodes;

            foreach (XmlNode setting in appKids) 
            {

                if (setting.Attributes["key"].Value == "AgentVersion")
                    setting.Attributes["value"].Value = Version;
            }

            config.Save(configFile);
  }

我正在加载的配置文件config.Load(configFile)如下:

<?xml version="1.0"?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
  </startup>

  <appSettings>
    <add key="AgentVersion" value="2.0.5" />
    <add key="ServerHostName" value="" />
    <add key="ServerIpAddress" value="127.0.0.1" />
    <add key="ServerPort" value="9001" />
  </appSettings>
</configuration>

我错过了什么吗?我认为它只会编辑那个特定的属性AgentVersion,但它并没有真正做任何事情。

4

2 回答 2

1

你知道ConfigurationManager类吗?您可以使用它来操作您的app.config文件,而无需手动执行任何操作。我不认为你应该重新发明轮子,除非你有充分的理由:

static void SaveVersion(string configFile, string version) 
{
    var myConfig = ConfigurationManager.OpenExeConfiguration(configFile);
    myConfig.AppSettings.Settings["AgentVersion"].Value = version;
    myConfig.Save();
}
于 2013-06-18T21:20:12.067 回答
1

尝试这个:

static void SaveVersion(string configFile, string Version) 
{
    var config = new XmlDocument();
    config.Load(configFile);

    var agentVersionElement = config.DocumentElement.SelectSingleNode("configuration/appSettings/add[@key = 'AgentVersion']") as XmlElement;
    if (agentVersionElement != null)
        agentVersionElement.SetAttribute("value", version);

    config.Save(configFile);
}

请注意,我是SelectSingleNode从做的DocumentElement,而不是从XmlDocument本身做的。

于 2013-06-18T21:22:06.020 回答