c# - 无法在 .NET 项目中使用 PerUserRoaming 参数保存配置文件

标签 c# .net wpf configurationmanager

我正在开发一个 WPF 项目。我想保存用户设置。我使用ConfigurationManagerClass。我阅读了这些链接( http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspxhttp://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/

相关文章:

c# - 如何以 wpf 样式绑定(bind)按钮命令

c# - IronPython 使用 C# 模块文档

c# - SslStream 客户端无法完成与 Stunnel 服务器的握手

c# - 从绑定(bind)到 DataGridView 的 DataTable 中删除最后一个 DataRow 时如何防止出错?

.net - 运行 `dotnet test` 时显示 `dotnet vstest` 输出接收器的输出

c# - 使用 WPF 捕获窗口

c# - 当值在源的 set 子句中被检查为无效时更新目标

c# - Azure 存储表分页

c# - Gridview动态添加新行

c# - System.FormatException : The JSON value is not in a supported DateTimeOffset format