【问题标题】:Not able to persist new changes in appsetting section in app.config WPF?无法在 app.config WPF 中的 appsetting 部分保留新更改?
【发布时间】:2013-04-11 12:29:07
【问题描述】:

以下是我用来更新或更改 app.config 中 appsetting 中的值的代码

 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);              
 config.AppSettings.Settings["userName"].Value = username;
 config.AppSettings.Settings["pwd"].Value = pwd;
 config.Save(ConfigurationSaveMode.Modified, true);                
 ConfigurationManager.RefreshSection("appSettings");

我正在使用上面的代码在运行时更改或更新 appsetting 部分中的设置,并希望这些更改保持不变,以便在我运行应用程序时它应该从 appsettings 中选择新值,但在这里它不会发生,所以更改当我再次重新启动我的应用程序时,在运行时制作和保存的内容不会持续存在,它具有旧的默认设置。我还检查了 bin/debug 中的 app.config,但它在 appsettings 中也有旧值。我参考了各种博客并在这里发帖作为参考,但它得到了与上面相同的代码,但它没有保留设置。have referred this post

【问题讨论】:

  • 您在哪里检查新值?在代码或 app.config 中?
  • 在 App.config 中,当用户提供新的用户名和密码时,我的应用程序应该覆盖在 aspp.config 中的 appsettings 中设置的默认用户名和密码,并且下次启动时我想要最后更新的用户名和密码因此我正在寻找一种方法,以便我可以保留对 app.config 中的 appsettings 值所做的任何更改。但不知何故,上面的代码不会在 appsettings 中保存新值。

标签: c# wpf c#-4.0 app-config


【解决方案1】:

我得到了上述问题的解决方案,我的目标是在应用程序或用户级别保持运行时所做的更改。最初我尝试使用 App.config,我在 app.config 的 appsettings 部分保留了应用程序的默认设置,但后来经过研究,我参考了我知道 appsetting 不会保留更改,而是可以在 YourApplication 下使用 userSettings 部分.Property.Settings 您可以提供您的用户级别设置,它对我有用。为此,您无需转到 App.config 手动执行此操作,而是可以从项目的属性窗口中执行此操作。

右键单击您的项目-> 选择左侧的设置选项卡-> 现在在右侧您将看到资源部分,提供资源名称、类型、范围及其值,您就完成了。相同的值也可以从代码中动态访问和更改。 以下是相同的代码摘录--

访问设置值

enter code here
        userName = Properties.Settings.Default.UserName;
        pwd = Properties.Settings.Default.PWD;

保存新设置返回

enter code here
        Properties.Settings.Default.UserName = userName.ToString();
        Properties.Settings.Default.PWD = newPWD..ToString();
        Properties.Settings.Default.Save();

当您下次启动应用程序时,您将获得新的更改设置作为默认设置。 我希望这会有所帮助 谢谢各位

主播

【讨论】:

    【解决方案2】:

    见下文(来自 MSDN)并记住 app.config 在您的项目中。 .exe.config 是实际的文件名。 客户端应用程序使用适用于所有用户的全局配置、适用于单个用户的单独配置以及适用于漫游用户的配置。 userLevel 参数通过指示配置文件是否没有用户级别(配置文件与应用程序位于同一目录中)或具有每个用户级别(配置文件位于应用程序设置路径中)来确定正在打开的配置文件的位置由用户级别决定)。

    通过为 userLevel 传递以下值之一来指定要获取的配置:

    To get the Configuration object that applies to all users, set userLevel to None.
    
    To get the local Configuration object that applies to the current user, set userLevel to PerUserRoamingAndLocal.
    
    To get the roaming Configuration object that applies to the current user, set userLevel to PerUserRoaming.
    NoteNote
    
    To get the Configuration object for a resource, your code must have read permissions on all the configuration files from which it inherits settings. To update a configuration file, your code must additionally have write permissions for both the configuration file and the directory in which it exists.
    

    【讨论】:

      【解决方案3】:

      我之前也遇到过同样的问题。我宁愿把它放在评论中,但我没有这个特权。我的回答可能不是你的情况,但我认为值得分享。

      请问您的 bin 文件夹在哪里?当您以编程方式更改不在用户可访问空间中的文件时,Windows 7 会在漫游空间中创建该文件的副本,并且该文件将保留在那里。每次您尝试访问该文件(如您的 app.config)时,W7 都会将您的读取/写入透明地重定向到该文件,因此您有可能在漫游空间中修改该文件,而您正在查看的文件保持不变。

      在您连续启动应用程序时,您所做的更改是否仍然存在?

      免责声明/道歉:我不是一个有经验的用户,所以如果我说的是愚蠢的话,请告诉我,我将删除此评论。

      【讨论】:

      • 抱歉,您的回复与我的问题无关。关于 bin 文件夹,当您创建和构建 wpf 项目时,它默认位于项目文件夹内
      • 也许我使用了错误的措辞并做出了一些不精确的假设,但另一个答案中的@Ramesh 或多或少地说出了我所说的话。您能否检查下一次运行您的应用程序是否从 app.config 中恢复了正确的数据?
      • 我又来了。检查this link 以禁用W7 虚拟商店,我认为这是导致您的问题的安全策略。我已经尝试过您的相同代码并使用 procmon 分析可执行文件我已经看到他访问了虚拟商店中的文件。
      • 不,伙计,情况并非如此,我没有创建任何新文件或保存在磁盘上。我只是在 app.config 中修改应用程序设置并尝试保存这些新设置,以便我的应用程序可以在下次启动应用程序时使用它。感谢您的回复
      猜你喜欢
      • 2010-10-11
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 2011-09-30
      • 2016-03-25
      • 1970-01-01
      相关资源
      最近更新 更多