Несмотря на то, что есть много сообщений о файлах конфигурации .net, я считаю, что мои требования не позволяют ни одного из предложенных решений (или я не понимаю процесс, достаточный для того, чтобы он работал у меня).
Ситуация заключается в том, что у меня есть приложение Windows Forms (может также быть другим приложением), которое связывает определенные пользовательские поля ввода (например, IP-адрес), а также свойства формы (размер окна и т.д.) с настройками приложения (в в области Свойства- > Настройки). Насколько я понимаю, эти параметры те же, что и в моем файле app.config проекта, поэтому я должен использовать класс System.Configuration.ConfigurationManager для управления этими настройками.
Что я хочу сделать, так это разрешить пользователю экспортировать и импортировать все сохраненные настройки. Вместо того, чтобы выполнять сериализацию какого-либо пользовательского объекта или работать с INI файлами, я подумал, что было бы проще просто сохранить и заменить файл конфигурации, который использует приложение.
Относительно легко сохранить текущие настройки в указанном файле:
internal static void Export(string settingsFilePath)
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
config.SaveAs(settingsFilePath);
}
Однако восстановление файла конфигурации для перезаписывания текущих настроек оказывается затруднительным. Кажется, что я могу открыть файл конфигурации, например,
var newConfig = ConfigurationManager.OpenExeConfiguration(settingsFilePath)
но я не вижу, как полностью заменить все настройки в текущей конфигурации на файлы импортированного файла. [Edit: эта перегрузка должна получать путь к .exe, а не к .config файл. Открытие exe файла таким образом, возможно, приведет к исключению ConfigurationErrorsException, если вызывающий код не ссылается на те же сборки в файле конфигурации.]
Возможно, мне нужно только использовать методы, описанные в других сообщениях, чтобы заменить только раздел конфигурации, а не все, но я не вижу как это будет работать в этой точке.
Любые идеи? Я иду по правильному пути, или я должен просто использовать INI файлы (или что-то еще)?