2013-02-18 2 views
7

В моей программе есть некоторые настройки, в которых все имеют пользовательский охват. Однако при запуске программы он создает файл AppName.exe.config, содержащий настройки.Файл user.config не создается, но app.config есть?

При сохранении настроек позже во время выполнения он создает файл user.config (который ранее не существовал) в AppData/Local/AppName/location, но этот файл содержит только сохраненную настройку.

Почему это происходит? Почему он не создает user.config или не использует это при запуске, если он существует?

+0

+1 от меня. Пожалуйста, верните решение, к которому вы пришли, поскольку это хороший вопрос ИМХО. Существует довольно много обходов для обмена файлом app.config между отдельными приложениями (т. Е. Не только классами/формами в одном домене приложения), и они будут _probably_ выбирать все, что угодно. Userfig (ы) присутствуют, когда приложение (который будет учитывать вашу проблему повторно для нескольких файлов), но я ничего не могу найти непосредственно, чтобы решить проблему получения обновленных общих конфигураций, где файлы user.config могут быть обновлены одним из приложений для обмена во время выполнения. – Sepster

ответ

3

От Application Settings Architecture at MSDN:

  1. Настройки приложения-Scoped могут храниться либо в machine.config или app.exe.config файлов. Machine.config всегда только для чтения, а app.exe.config ограничен защитой соображениям для чтения только для большинства приложений.

  2. Пользовательские настройки могут быть сохранены в файлах app.exe.config, и в этом случае они рассматриваются как статические значения по умолчанию.

  3. Настройки пользователя, не относящиеся к стандарту, хранятся в новом файле user.config, где пользователь является именем пользователя в настоящее время , выполняющего приложение. Вы можете указать значение по умолчанию для области с параметром DefaultSettingValueAttribute. Поскольку настройки приложения часто меняются во время выполнения приложения, user.config имеет значение , всегда чтение/запись.

Что вы видите первое это (то, что вы назвали) вашим «построено в настройках» хранятся в виде (то, что называет Microsoft) пользователем Scoped настройки «по умолчанию» статического, которые откладываются в app.exe (согласно 2).

И затем, когда вы записываете свои настройки во время выполнения, они рассматриваются как «нестандартные» параметры пользовательского охвата, и они записываются в user.config (согласно 3), поэтому почему только тогда вы видите файл user.config.

Короче говоря, нет необходимости в файле user.config для каждого пользователя, если параметры пользовательского охвата одинаковы (по умолчанию) для всех.

+0

Нельзя ли просто нажать их все в этот файл? Поскольку у меня есть сервис и форма, использующие их, и что происходит, когда форма обновляет значение, он делает этот файл user.config, а затем служба по-прежнему извлекает значения из файла app.config: S – JonE

+0

Я не убедитесь, что вы _meant_, чтобы иметь возможность «делиться» одной конфигурацией (либо одним файлом app.config, либо в сочетании с одним или несколькими файлами user.config) между двумя различными приложениями. AFAIK не может для 'LocalFileSettingsProvider' знать, что файл конфигурации, к которому он привязан, был обновлен внешним источником. Я подозреваю, что вам нужно будет реализовать собственный вывод 'SettingsProvider' (или, может быть, есть что-то в сети, которая делает то, что вам нужно). – Sepster

+0

Или вы можете поэкспериментировать с [LocalFileSettingsProvider.GetPropertyValues] (http://msdn.microsoft.com/en-au/library/system.configuration.localfilesettingsprovider.getpropertyvalues.aspx) или [LocalFileSettingsProvider.Initialize] (http: // msdn.microsoft.com/en-au/library/system.configuration.localfilesettingsprovider.initialize.aspx), чтобы узнать, не изменилось ли какое-либо из этих «обновленных» их кешированных параметров, когда они читаются свежими из объединенных файлов app.config/user.config. Выполнение этого непосредственно перед доступом к настройке может просто решить проблему: он может распознать новый файл user.config. – Sepster

Смежные вопросы