Как записать в файл User.Config через ConfigurationManager?
Я пытаюсь сохранить настройки пользователя в файле конфигурации с помощью ConfigurationManager.
Я хочу настроить эти параметры только для пользователя, потому что изменения приложений не могут быть сохранены в Vista/Win 7 без прав администратора.
Это, кажется, дает мне конфигурацию пользователя, которая, кажется, сохраняется здесь в Win 7 ([Диск]:\Users\[Имя пользователя]\AppData\Local\[ApplicationName]\[AssemblyName][hash]\[Version\)
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
Всякий раз, когда я пытаюсь сохранить какие-либо изменения в этой конфигурации, я получаю следующее исключение:
InnerException: System.InvalidOperationException
Message="ConfigurationSection properties cannot be edited when locked."
Source="System.Configuration"
StackTrace:
at System.Configuration.SectionInformation.VerifyIsEditable()
at System.Configuration.MgmtConfigurationRecord.GetConfigDefinitionUpdates(Boolean requireUpdates, ConfigurationSaveMode saveMode, Boolean forceSaveAll, ConfigDefinitionUpdates& definitionUpdates, ArrayList& configSourceUpdates)
Я попытался добавить пользовательский ConfigurationSection к этой конфигурации. Я попытался добавить в AppSettingsSection. Всякий раз, когда я звоню config.Save()
это исключение выше.
Есть идеи?
Я пытался использовать класс ApplicationSettingsBase через дизайнер Project->Settings, но не похоже, что вы можете сохранять пользовательские типы с этим. Я хочу схожую функциональность с возможностью сохранения пользовательских типов.
1 ответ
Вам необходимо установить значение SectionInformation.AllowExeDefinition для раздела:
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming);
UserSettings settings;
if ((settings = (UserSettings)configuration.Sections[GENERAL_USER_SETTINGS]) == null)
{
settings = new UserSettings();
settings.SectionInformation.AllowExeDefinition =
ConfigurationAllowExeDefinition.MachineToLocalUser;
configuration.Sections.Add(GENERAL_USER_SETTINGS, settings);
configuration.Save();
}
Значением по умолчанию является ConfigurationAllowExeDefinition.MachineToApplication, которое позволяет размещать разделы только на machine.config и app.exe.config.