12

我正在尝试使用 ConfigurationManager 将用户设置保存到配置文件中。

我只想将这些设置范围限定为用户,因为没有管理员权限就无法在 Vista/Win 7 上保存应用程序更改。

这似乎让我得到了用户的配置,它似乎保存在 Win 7 中 ([Drive]:\Users\[Username]\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()它时,都会抛出上面的异常。

有任何想法吗?

我尝试通过 Project->Settings 设计器使用 ApplicationSettingsBase 类,但您似乎无法使用它保存自定义类型。我想要具有保存自定义类型的类似功能。

4

1 回答 1

8

您需要为该部分设置 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 上。

于 2010-04-13T20:14:15.040 回答