ConfigurationManager может сохранить XML-комментарии на Сохранении ()?

Я записал маленькую утилиту, которая позволяет мне изменять простой AppSetting для файла другого приложения App.config и затем сохранять изменения:

 //save a backup copy first.
 var cfg = ConfigurationManager.OpenExeConfiguration(pathToExeFile);
 cfg.SaveAs(cfg.FilePath + "." + DateTime.Now.ToFileTime() + ".bak"); 

 //reopen the original config again and update it.
 cfg = ConfigurationManager.OpenExeConfiguration(pathToExeFile);
 var setting = cfg.AppSettings.Settings[keyName];
 setting.Value = newValue;

 //save the changed configuration.
 cfg.Save(ConfigurationSaveMode.Full); 

Это работает хорошо, за исключением одного побочного эффекта. Недавно сохраненный .config файл теряет все исходные XML-комментарии, но только в области AppSettings. Действительно ли возможно для сохранения XML-комментариев от исходной области AppSettings конфигурационного файла?

Вот pastebin полного источника, если требуется быстро скомпилировать и выполнить его.

26
задан Mike Atlas 23 December 2009 в 19:05
поделиться

2 ответа

Я прыгнул в Reflector.Net и посмотрел на декомпилированный источник для этого класса. Короткий ответ - нет, комментарии не сохранились. Способ написания класса от Microsoft заключается в генерации XML-документа из свойств на конфигурационном классе. Так как комментарии не появляются в классе конфигурации, они не возвращают его обратно в XML.

А хуже всего то, что Microsoft опечатала все эти классы, так что вы не можете вывести новый класс и вставить свою собственную реализацию. Единственный вариант - это перенести комментарии за пределы раздела AppSettings или вместо них использовать XmlDocument или XDocument классы для разбора конфигурационных файлов.

Извините. Это крайний случай, который Microsoft просто не планировала.

28
ответ дан 28 November 2019 в 07:40
поделиться

Если комментарии критичны, возможно, единственный вариант - это прочитать и сохранить файл вручную (с помощью XmlDocument или нового Linq-связанного API). Если же эти комментарии не критичны, я либо отпущу их, либо, возможно, рассмотрю возможность их встраивания в качестве (пусть и избыточных) элементов данных.

.
2
ответ дан 28 November 2019 в 07:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: