Скопируйте настройки приложения из внешнего файла в app.config

Я пытаюсь выяснить, как лучше всего обновить файл app.config существующего приложения, чтобы включить новые настройки приложения, без перезаписи ранее существовавших значений настроек.

Итак, начнем с самого начала: у меня есть проект, который встроен в MSI с помощью проекта установки Visual Studio, и этот MSI используется для установки приложения. Это приложение уже установлено примерно в 1000+ местах. Теперь, в новой версии приложения, у нас есть новый параметр приложения для определения конечной точки веб-службы. Однако проект установки не будет развертывать новый app.config с новым параметром, потому что проекты установки такие тупые, и они будут устанавливать app.config только в том случае, если он еще не существует, или если в существующем уже есть сопоставление дат создания и изменения, чтобы избежать перезаписи пользовательской конфигурации.

Теперь, поскольку я не могу перезаписать app.config, я подумал, что, возможно, я разверну изменения app.config как отдельный файл XML, и при запуске приложения я загружу этот отдельный файл XML, скопирую все настройки из сравните его с тем, что находится в фактическом файле app.config, и все, что отсутствует, я сохраню в файле app.config.

Но у меня проблемы с загрузкой конфигурации из внешнего файла XML и ее копированием в app.config. Как бы я это сделал? Есть ли другой лучший способ управлять обновлением файла app.config? Какая лучшая практика?

Я больше знаком с Java, и это было бы очень просто сделать с файлами свойств, но не так просто с файлами конфигурации .NET.


person Jim    schedule 28.01.2013    source источник


Ответы (2)


Насколько я знаю, нет готового метода.

Я бы сделал это, проанализировав файл в XDocument, а затем проверив, является ли doc.Element ("settingName") нулевым. Если это так, то этот параметр не существует, и вы можете добавить значение по умолчанию. Если узел действительно существует, пользователь определил настраиваемую настройку.

person Echilon    schedule 28.01.2013
comment
У меня была такая же мысль, но кажется глупым, что вы должны анализировать это как XML вместо того, чтобы просто загружать оба файла как объекты конфигурации и сравнивать их, чтобы перенести новые настройки из нового файла в предварительный -существующий файл. Я имею в виду, что .NET знает, как загрузить файл .config - почему он не позволяет нам просто загружать столько, сколько мы хотим, из любого места, где мы хотим, и манипулировать ими так, как мы хотим, как вы можете с файлом свойств Java? - person Jim; 28.01.2013
comment
Я реализовал это таким образом, и он отлично работает, но это своего рода заноза в заднице. Серьезно, в Java так легко просто открывать файлы свойств из любого места и загружать все в объект свойств, чтобы вы могли сравнивать и копировать из одного в другой в меру своего сердца. В .NET должно быть так же легко загружать несколько файлов конфигурации без анализа XML. - person Jim; 06.02.2013
comment
Для меня это звучит как хороший повод создать библиотеку-оболочку с открытым исходным кодом. :) - person Echilon; 07.02.2013

Вы можете добавить ссылку на внешний файл app.config. http://blog.andreloker.de/post/2008/06/Keep-your-config-clean-with-external-config-files.aspx

http://www.dotnetfunda.com/articles/article969-external-appsetting-file-for-your-appsettings-in-config-file.aspx

person Petrutiu Mihai    schedule 29.01.2013
comment
Я не об этом просил. Мне не нужно связывать два файла конфигурации вместе. Мне нужно загрузить две отдельные версии одного и того же файла конфигурации, сравнить настройки в них и скопировать из старой в новую. - person Jim; 06.02.2013
comment
Первая ссылка не работает - person nalka; 25.06.2019