C#中的应用程序设置文件复杂

时间:2013-01-08 13:57:21

标签: c# application-settings

我在VS2008中 C#开发的服务应用程序中添加了设置文件。在设置文件的设计器中,我插入了带有user scope的新日期时间变量,并为该日期时间变量输入了默认值。例如,假设此变量的名称为MyDate,其值为“2013-01-08”。
当我运行我的服务应用程序时,我使用以下代码行正确获得MyDate的值:

Datetime value = app.Default.MyDate; // app is the name of the settings file

之后,我使用以下代码行将MyDate设置为“2013-01-08 14:00:00”:

app.Default.MyDate = DateTime.Now; // Suppose Now is 2013-01-08 14:00:00 at that time.
app.Default.Save();

到目前为止,一切都还可以。 MyDate参数设置为我想要的。但是,我无法在app.config文件中看到新值。当我在Debug文件夹中打开配置文件时,我只看到:

    <setting name="MyDate" serializeAs="String">
        <value>2013-01-08</value>
    </setting>

令人惊讶的是,当我重新运行该应用程序时,MyDate参数似乎是“2013-01-08 14:00:00”的“2013-01-08”内容!我查看了Debug文件夹和项目文件夹中的每个配置文件,但我找不到“2013-01-08 14:00:00”的任何值。但MyDate参数在启动时设置为此值。
我想知道MyDate变量的值存储在哪里?我应该找哪个文件?

解决方案编辑:我决定不使用设置文件。我将使用app.config文件insead的设置文件来存储我的应用程序参数。 app.config不是类型安全的,但编辑infile参数更容易。另一方面,设置文件就像一个封闭的盒子,你找不到它存储参数值的文件。

3 个答案:

答案 0 :(得分:1)

那是因为它们存储在

<Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config档案。

例如:C:\Users\<User>\AppData\Local\<Company>\<Product>\<Version>\user.config文件。

从您的代码中,您可以使用:

var path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

获取本地应用程序数据的存储位置。

<强> [UPDATE]

如您所说,它是Windows服务应用程序,请尝试搜索以下路径:

c:\windows\system32\config\systemprofile\AppData\Local\

答案 1 :(得分:1)

具有用户范围的设置实际上并未存储在您的app.config中,而是存储在名为user.config的文件中。此文件的位置由System.Windows.Forms.Application.LocalUserAppDataPath属性确定。 See here了解有关架构的更多详细信息。

如果您愿意,也可以更改此位置,有关详细信息,请参阅this answer

答案 2 :(得分:0)

  

到目前为止,一切都还可以。 MyDate参数设置为我想要的。   但是,我无法在app.config文件中看到新值。

在这里,您正在使用App.config文件进行误解。 app.config文件是您的解决方案文件,它是您的编码/设计时间的一部分。在调试模式或发布模式下运行应用程序时,不应更改此项。究竟发生了什么。这个有你的默认设置。为您的应用程序。

假设您在调试模式下运行应用程序,这将生成Bin / Debug文件夹中的输出,该文件夹应该包含myapplication.exe.config。你需要看到这个文件而不是app.config。你所改变的内容将被更改为myapplication.exe.config。文件不在app.config中。