Добавить пользовательский элемент конфигурации во время выполнения
Можно ли добавить пользовательский элемент конфигурации во время выполнения.
Вот мой файл 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();
}