我的项目中有一个设置,当从代码中引用时(即我将鼠标悬停在对象上,我可以看到该值),与Properties.Settings文件中的设置不同。这是一个旧的价值。我可以转到设置编辑器并将值更新为其他值,但旧值仍然存在。 如果我使用.Properties.Settings.Default.Save()方法,则会更改设置,但是当我停止调试时,该更改不会反映在编辑器中。 我可以在文本编辑器中打开Settings.settings文件,它会向我显示与VS中的设置编辑器中的内容相同的内容。 我也可以在我的计算机上搜索其他的Settings.settings文件,只显示那些文件(其他文件显示但是它们显然不相关,修改旧日期并且没有相同的设置名称。)
这个文件在哪里,为什么价值与我认为的不同?
修改
我无法再将原始设置变量同步,因此我使用设置GUI界面创建了一个新的设置变量。它似乎正在正常传播。每个人都建议我查看的所有文件都有我希望我的设置变量的值,但是当我运行调试会话并查看相同的变量时,它是一些我无法追踪的旧值。
现在我回想起来,大约1.5个月前,我遇到了另一个变量的类似问题但我没有深入挖掘这个时间。我不得不做同样的事情。创建一个新的类似名称的变量,删除旧变量并移动一个变量。
编辑2:
更改设置变量名称并让VS通过它自己的程序传播该更改似乎也是一种硬重启。
答案 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中的值。