Как я могу изменить значение пользовательской переменной configSections? - PullRequest
0 голосов
/ 14 января 2019

У меня есть пользовательский раздел в configSections моего файла App.config, как я могу изменить значение одной из переменных этого раздела в коде?

Я хотел бы изменить раздел «serverConfiguration», и я хочу изменить значение «serverUrl»:

<?xml version="1.0" encoding="utf-8"?>
 <configuration>
  <configSections>
   <section name="serverConfiguration" type="someType" />
  </configSections>
    <serverConfiguration serverUrl="http://development/server/" />
</configuration>

Я нашел этот фрагмент кода из предыдущего вопроса, App.Config изменить значение . Это выглядит близко к тому, что мне нужно, но я не уверен, как изменить его сам, чтобы использовать его для пользовательского раздела, а не для AppSettings. Будет ли приведенный ниже код работать на то, что я пытаюсь сделать? Как изменить приведенный ниже код, чтобы разрешить мне передавать эту новую строку как serverUrl "http://staging/server/"? Спасибо!

class Program
{
    static void Main(string[] args)
    {
        UpdateSetting("lang", "Russian");
    }

    private static void UpdateSetting(string key, string value)
    {
        Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        configuration.AppSettings.Settings[key].Value = value;
        configuration.Save();

        ConfigurationManager.RefreshSection("appSettings");
    }
}

1 Ответ

0 голосов
/ 14 января 2019

У вас есть возможность загрузить конфигурацию в XML, отредактировать значение узла и сохранить его обратно. Попробуйте с этим

        var xmlDoc = new XmlDocument();
        xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);          

        xmlDoc.SelectSingleNode("//serverConfiguration").Attributes["serverUrl"].Value = "http://staging/server/";
        xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

Возможно, неплохо бы обновить разделы конфигурации после сохранения файла.

ConfigurationManager.RefreshSection

...