2

我正在尝试使用 Settings.settings 来定义/保留一些变量。为简洁起见,我设置了一个测试文件来演示我看到的行为:

首先,我在 Settings.settings 中定义了一个设置:

从 Settings.settings 窗口(变量名

然后我有以下代码来测试更改变量名:

    public Form1()
    {
        InitializeComponent();

        string newString = Properties.Settings.Default.variableName;
        Properties.Settings.Default.variableName = "This is a new string";
        Properties.Settings.Default.Save();
    }

第一次在调试器中运行上述代码,我从 Properties.Settings 中获取 variableName 的当前值(我最初在 Settings.settings 窗口中设置的值)。正如预期的那样,newString 设置为“这是一个字符串”。好的.....

执行接下来的两行后,调试器显示 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 的值之外,我似乎无法在设计时查看结果。这似乎不仅对我来说很奇怪,而且是不可能的。

我错过了什么/我没有在哪里寻找?我完全希望 variableName 的值在 Settings.settings 窗口中发生变化,但它永远不会。我在 StackOverflow/Google 上到处找,似乎找不到答案。

提前致谢....

4

2 回答 2

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 资源管理器中不可见。

于 2013-04-27T03:59:05.947 回答
0

我不确定我是否理解你的问题。该可变内容保持不变。而已。为什么要设置一个持久变量以便以后更改它?

于 2013-04-26T18:40:46.913 回答