我正在开发一个 WPF 项目。我想保存用户设置。我使用ConfigurationManagerClass。我阅读了这些链接( http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx , http://msdn.microsoft.com/en-us/library/ms134265(v=vs.110).aspx )。然后我决定使用 PerUserRoaming 参数。根据此参数,设置应写入 "C:\Users\BDagli\AppData\Roaming\DiBASUI\DiBASUI.vshost.exe_Url_zep32lw2fomt1eij4jb2qhip2cbd211o\1.0.0.0\user.config"中。但它不能创建。并发生异常。
System.Configuration.ConfigurationErrorsException: An error occurred executing the configuration section handler for appSettings. ---> System.InvalidOperationException: ConfigurationSection properties cannot be edited when locked. at System.Configuration.SectionInformation.VerifyIsEditable() at System.Configuration.MgmtConfigurationRecord.GetConfigDefinitionUpdates(Boolean requireUpdates, ConfigurationSaveMode saveMode, Boolean forceSaveAll, ConfigDefinitionUpdates& definitionUpdates, ArrayList& configSourceUpdates) --- End of inner exception stack trace --- at System.Configuration.MgmtConfigurationRecord.GetConfigDefinitionUpdates(Boolean requireUpdates, ConfigurationSaveMode saveMode, Boolean forceSaveAll, ConfigDefinitionUpdates& definitionUpdates, ArrayList& configSourceUpdates) at System.Configuration.MgmtConfigurationRecord.SaveAs(String filename, ConfigurationSaveMode saveMode, Boolean forceUpdateAll) at System.Configuration.Configuration.SaveAsImpl(String filename, ConfigurationSaveMode saveMode, Boolean forceSaveAll) at System.Configuration.Configuration.Save(ConfigurationSaveMode saveMode) at DiBASUI.ConfigurationHelper.AddUpdateAppSettings(String key, String value) in c:\Users\BDagli\Documents\Visual Studio 2013\Projects\WpfApplication2\DiBASUI\ConfigurationHelper.cs:line 66
我的代码如下:
public static void AddUpdateAppSettings(string key, string value)
{
try
{
var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming);
var settings = configFile.AppSettings.Settings;
if (settings[key] == null)
{
settings.Add(key, value);
}
else
{
settings[key].Value = value;
}
configFile.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}
catch (ConfigurationErrorsException ex)
{
Console.WriteLine(ex.ToString());
}
}
*******************************
ConfigurationHelper.AddUpdateAppSettings("rememberMe", "true");
我该如何继续?
我添加了 AllowExeDefinition。
public static void AddUpdateAppSettings(string key, string value)
{
try
{
Configuration configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming);
AppSettingsSection appSettings = configFile.AppSettings;
error line-> appSettings.SectionInformation.AllowExeDefinition = ConfigurationAllowExeDefinition.MachineToRoamingUser;
var settings = appSettings.Settings;
if (settings[key] == null)
{
settings.Add(key, value);
}
else
{
settings[key].Value = value;
}
configFile.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}
catch (ConfigurationErrorsException ex)
{
Console.WriteLine(ex.ToString());
}
}
出现如下异常:
System.InvalidOperationException: {"ConfigurationSection properties cannot be edited when locked."}
最佳答案
使用字符串 exe 路径。只有这样才能保存配置。
private void UpdateConfigSection(string sectionName, string value)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetEntryAssembly().Location);
config.AppSettings.Settings[sectionName].Value = value;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
关于c# - 无法在 .NET 项目中使用 PerUserRoaming 参数保存配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27646394/