【问题标题】:Properties.Settings is not the value I expect it to beProperties.Settings 不是我期望的值
【发布时间】:2011-09-06 18:14:29
【问题描述】:

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

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

编辑:

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

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

编辑 2:

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

【问题讨论】:

  • 设置完美运行。你做错了什么。由于缺乏细节,无法说清楚。
  • 我同意...通常程序是对的,我错了。但我哪里错了。

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


【解决方案1】:

您还没有找到设置文件。它没有命名为 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类构造函数。

【讨论】:

  • 所有这些不同的文件实例似乎都不同步。我已经将项目复制到闪存驱动器,以便我可以在其他地方处理它,这就是它开始的时候,但错误在原始文件中。我的复制方法是压缩它。没有拖放或任何会取代原始文件的东西......
  • 您不会以这种方式复制 user.config 文件。无论您将其复制到哪台机器,都将开始运行该程序而无需 user.config 文件。几乎可以保证机器之间的设置不同步。相应地编码。
  • 这个教训是很难学到的。有没有办法轻松地将项目移动到另一台计算机上以避免将来发生这种事情? (当我在复制文件时遇到此错误时,原始问题是基于原始未复制文件)
  • 我不太清楚为什么这是个问题。仅使用用户范围设置来存储非关键便利值。主窗口的最后大小和位置,那种东西。它不能替代您自己的数据文件。
  • 我想我知道发生了什么。经过多次头痛后,我发现我的 user.config 文件被保存在这里 C:\Documents and Settings\[me]\Local Settings\Application Data\[company]\[app].vshost.exe_StrongName_ttoboiqesqszjcolu4xnyocamaaop1yg\1.0.0.0 而不是这里:C:\Documents and Settings\[me]\Local Settings\Application Data\[company]\[app].exe_Url_c1ygid5lz3045ryrnckbiubtgfsqlwmy\1.0.0.0。当我在我的 settings.settings 页面中单击同步按钮时,它将无法找到该用户文件。多么美妙的体验……
【解决方案2】:

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

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

【讨论】:

  • 我现在看到了这个文件。所以我猜他们已经不同步了。如何让所有这些版本的用户设置同步备份。顺便说一句,我还没有发布程序。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    当您保存设置时,设置将保存到 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 中的值。

    【讨论】:

    • \bin\Debug\YourApplicationName.exe.config、app.config 和 settings.settings 都说同样的事情(也是我想让他们说的事情),但这不是当应用程序运行。查看我的原始编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2021-07-26
    • 1970-01-01
    相关资源
    最近更新 更多