C# 设置不是我期望的值

C# 设置不是我期望的值,c#,visual-studio-2010,settings.settings,C#,Visual Studio 2010,Settings.settings,我在我的项目中有一个设置,当从代码引用时(即,我将鼠标悬停在可以看到值的对象上),它与Properties.Settings文件中的设置不同。这是一个古老的价值观。我可以转到设置编辑器并将该值更新为其他值,但旧值仍然存在。 如果我使用.Properties.Settings.Default.Save()方法,设置将被更改,但当我停止调试时,该更改不会反映在编辑器中。 我可以在文本编辑器中打开Settings.Settings文件,它将显示与VS中设置编辑器相同的内容。 我也可以在我的计算机上搜索

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

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

编辑:

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

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

编辑2:


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

默认属性.Settings值由
app.config
中的值覆盖


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

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

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

C:\Users\HPassant\AppData\Local\MyCompany\
WindowsFormsApplication1.\u Url\ghbcotszbdzyqv2ovpc1keo1yctxkcw5\1.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\u StrongName\u ttoboiqesqszjcolu4xnyocamaaop1yg\1.0.0.0
而不是这里:
C:\Documents and Settings\[me]\Local Settings\Application Data\[company]\[app].exe_Url_c1gid5lz3045ryrnckbiubtgfsqlwmy\1.0.0
。当我单击“我的设置.设置”页面中的“同步”按钮时,它将无法找到该用户文件。多棒的体验啊…\bin\Debug\YourApplicationName.exe.config、app.config和settings.settings都说了同样的话(我希望他们说的话),但这不是应用程序运行时输出的内容。查看我的原始编辑。