我正在尝试使用Settings.settings来定义/保留一些变量。为简洁起见,我设置了一个测试文件来演示我所看到的行为:
首先,我在Settings.settings中定义一个设置:
然后我有以下代码来测试更改variableName:
public Form1()
{
InitializeComponent();
string newString = Properties.Settings.Default.variableName;
Properties.Settings.Default.variableName = "This is a new string";
Properties.Settings.Default.Save();
}
第一次在调试器中运行上面的内容,我从Properties.Settings中获取当前值(我最初在Settings.settings窗口中设置的值)的variableName。正如所料,newString设置为“This is a string”。好.....
执行接下来的两行后,调试器显示variableName已更改为“This is a new string”。好....
然后我再次通过调试器运行应用程序。我点击字符串newString行,在执行之前,newString是未定义的(当然)。好....
我一执行......
string newString = Properties.Settings.Default.variableName;
...并且在后续执行代码时,variableName的实际值被定义为“这是一个新字符串”(好......正如预期的那样)。
然后我返回到Settings.settings窗口。 variableName没有改变 - 它仍然是“这是一个字符串”。我甚至关闭了VSE 2012并重新启动了该项目。 Settings.settings永远不会改变。
新值存储在哪里?我检查了所有.config文件([appname] .exe.config,[appname] .vshost.exe.config,app.config和Settings.settings文件)和新值“这是一个新的字符串“无处可寻。
总之,我从代码中得到了我想要的结果,但除了在调试器中检查var的值之外,我似乎无法在设计时查看结果。这似乎不仅对我来说是特殊的,而且是不可能的。
我错过了什么/我不在哪里?我完全希望在Settings.settings窗口中更改variableName的值,但它永远不会。我在StackOverflow / Google上到处寻找,似乎无法找到答案。
提前致谢....
答案 0 :(得分:3)
您通过Settings.settings配置的原始值存储在可执行文件程序集旁边的.config文件中。除非您直接通过Visual Studio修改设置文件,否则这将永远不会更改;它本质上是一个只读文件。
用户的自定义设置存储在用户配置文件中的单独配置文件中。此文件的位置取决于程序集的元数据。例如,在Windows 7 / Vista上,位置可能如下所示:
C:\Users\<user name>\AppData\Local\<company name>\<assembly name>\
AssemblyName\<version>\user.config
如果您尚未在程序集的元数据中自定义公司名称,则可能默认为Microsoft。另请注意,AppData是一个隐藏文件夹,根据您的视图设置,可能在Windows资源管理器中不可见。
答案 1 :(得分:0)
我不确定我是否理解你的问题。该变量内容保持持久性。而已。为什么要设置持久变量以便以后更改?