Properties.Settings不是我期望的价值

时间:2011-09-06 18:14:29

标签: c# visual-studio-2010 settings.settings

我的项目中有一个设置,当从代码中引用时(即我将鼠标悬停在对象上,我可以看到该值),与Properties.Settings文件中的设置不同。这是一个旧的价值。我可以转到设置编辑器并将值更新为其他值,但旧值仍然存在。 如果我使用.Properties.Settings.Default.Save()方法,则会更改设置,但是当我停止调试时,该更改不会反映在编辑器中。 我可以在文本编辑器中打开Settings.settings文件,它会向我显示与VS中的设置编辑器中的内容相同的内容。 我也可以在我的计算机上搜索其他的Settings.settings文件,只显示那些文件(其他文件显示但是它们显然不相关,修改旧日期并且没有相同的设置名称。)

这个文件在哪里,为什么价值与我认为的不同?

修改

我无法再将原始设置变量同步,因此我使用设置GUI界面创建了一个新的设置变量。它似乎正在正常传播。每个人都建议我查看的所有文件都有我希望我的设置变量的值,但是当我运行调试会话并查看相同的变量时,它是一些我无法追踪的旧值。

现在我回想起来,大约1.5个月前,我遇到了另一个变量的类似问题但我没有深入挖掘这个时间。我不得不做同样的事情。创建一个新的类似名称的变量,删除旧变量并移动一个变量。

编辑2:

更改设置变量名称并让VS通过它自己的程序传播该更改似乎也是一种硬重启。

4 个答案:

答案 0 :(得分:8)

您尚未找到设置文件。它不是名为Setting.settings,这是一个项目文件。它被命名为“user.config”并存储在具有奇怪名称的目录中:

  

C:\用户\ HPassant \应用程序数据\本地\ MyCompany的\
WindowsFormsApplication1._Url_ghbcotszbdzyqv2ovpc1keo1yctxkcw5 \ 1.0.0.0

其中“HPassant”是用户名,“MyCompany”是[AssemblyCompany]属性,“WindowsFormsApplication1”是项目名称,后跟各种值的哈希值,后跟[AssemblyVersion]。您可以使用Reflector或ILSpy查看算法,查看ClientConfigPaths类构造函数。

答案 1 :(得分:3)

默认的Properties.Settings值被app.config中的值覆盖。

如果已部署的应用程序app.config已重命名为YourApplicationName.exe.config,并且是处理应用程序参数配置的推荐方法。

答案 2 :(得分:3)

我将设置范围从用户更改为应用程序,解决了我的问题。

答案 3 :(得分:1)

当您保存设置时,设置将保存到YourApplicationName.exe.config,正如@Albin Sunnanbo解释的那样。

因此,当您调用Settings.Default.Save()时,您正在更改此文件,而不是项目中的app.config。您的二进制文件不了解app.config,它们只关心已部署的副本。

设置变量有多个范围。如果将范围设置为“应用程序”,则只有该值的一个“实例”。如果将其设置为“用户”,则每个唯一的Windows用户都将拥有自己的设置副本。

您在app.config / Properties.Settings中提供的内容是默认值。当您调用Settings.Default.Save()时,它们将在YourApplicationName.exe.config中被覆盖。

调试时,您会在/ bin / debug文件夹中找到YourApplicationName.exe.config。看那里,您将看到应用程序中的值与此文件中的值相同,而不是app.config中的值。