Добавить пользовательский элемент конфигурации во время выполнения

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

Вот мой файл app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="NodeList"
               type="Configuration.NodeListSection, NodeListConfiguration"
               requirePermission="false" />
  </configSections>
  <NodeList>
    <nodes>
      <add name="Dev1" isdefault="false" description ="Dev server" />
      <add name="QA1" isdefault="true" description="QA server"/>
      <add name="Prod1" isdefault="false" description="Production" />
    </nodes>
  </NodeList>
</configuration>

Можем ли мы добавить больше узлов во время выполнения, используя код C#.

2 ответа

Решение

Это не похоже на встроенный раздел конфигурации. Вы обнаружите, что "NodesList" является разделом / элементом, который написан на заказ. Чтобы определить, откуда в вашей кодовой базе это происходит, поищите "NodesList" в верхней части вашего конфигурационного файла в configSections элемент. Это укажет вам на класс для изучения.

После этого вам нужен класс для правильной поддержки операций записи.

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

Изменить (после добавления дополнительной информации к вопросу):

Попробуйте что-то вроде (конечно, все зависит от того, что находится в кодовой базе NodeListSection):

using Configuration;

var nodeListSection = ConfigurationManager.GetSection("NodeList") as Configuration.NodeListSection;
var newNode = new NodeElement() { Name = "xyz", IsDefault = false, Description = "New Guy" };
nodeListSection.Nodes.Add(newNode);

Configuration.Save(ConfigurationSaveMode.Modified);

Размещенный вами файл выглядит не как обычный конфигурационный файл.NET, а как пользовательский XML-файл.

В любом случае - .config файлы - это просто файлы XML - вы можете открывать, манипулировать и сохранять их, используя любую из библиотек XML в BCL, например: XDocument,

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

    private void AddNewKey_Config(string key, string value, string fileName)
    {
        var configFile = ConfigurationManager.OpenExeConfiguration(fileName);
        configFile.AppSettings.Settings.Add(key, value);
        configFile.Save();
    }
Другие вопросы по тегам