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から実行していることに注意してください。DocumentElementXmlDocument

于 2013-06-18T21:22:06.020 に答える