6

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

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

编辑:

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

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

编辑2:

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

4

4 回答 4

10

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

C:\Users\HPassant\AppData\Local\MyCompany\
WindowsFormsApplication1._Url_ghbcotszbdzyqv2ovpc1keo1yctxkcw5\1.0.0.0

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

于 2011-09-06T20:24:14.420 回答
3

默认的 Properties.Settings 值被app.config.

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

于 2011-09-06T18:15:58.750 回答
3

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

于 2013-08-14T10:41:15.487 回答
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 中的值。

于 2011-09-06T19:15:42.000 回答