我正在尝试使用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类,但似乎无法使用此方法保存自定义类型。我想要具有保存自定义类型的功能的类似功能。

最佳答案

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

关于c# - 如何通过ConfigurationManager写入User.Config文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2632806/

10-11 20:59