2

我正在尝试存储一些持久的应用程序数据,因此我通过 R-单击它,选择属性,然后选择设置选项卡并手动输入设置名称、类型、范围和值,将设置添加到项目中

当我运行代码时,我会读取如下设置:

lastRunTime = My.Settings.LastRunTime

并将其设置为:

My.Settings.LastRunTime = lastRunTime

我在哪里可以看到新设置?因为看在上帝的份上,我看不到它在哪里更新设置。app.config 在我创建该设置时具有原始设置值。那么在哪里可以看到呢?

当我运行代码时,我看到它会更新它,并且下次我运行应用程序时,新值仍然存在,所以我知道它将它存储在某个地方。但是哪里?

4

4 回答 4

11

.NET 必须做一些特别的事情,它必须向您保证,另一个也恰好具有“LastRuntime”设置的程序不会覆盖为您的程序存储的值。为此,它将 user.config 文件存储在一个很难找回的目录中。它有一个奇怪的名字,比如

C:\Users\username\AppData\Local\WindowsFormsApplication1\WindowsFormsApplication1._Url_twchbbo4atpsvjpauzkgkvesu5bh2aul\1.0.0.0\user.config

请注意项目名称是路径的一部分,这是找回它的一种方法。名称中不可描述的部分是哈希,由项目的各种属性创建,这些属性使您的应用程序足够独特,即使名称匹配,也不会与另一个 .NET 程序发生冲突。比如您的产品名称、公司名称、exe 名称等。

请注意反之亦然,更改此类属性会使您丢失 user.config 文件。因此,如果“LastRuntime”是某种许可计量值,那么使用设置并不是最好的主意。

于 2013-06-21T23:06:50.463 回答
1

该值存储在用户配置文件下的 APPDATA 文件夹中。对于 Windows 7,请查看 C:\Users\\AppData\Roaming\

将有一个根据您配置 Visual Studio 的方式命名的文件夹。由于我的工作副本是在公司注册的,所以默认值是我的公司名称。由于我家的 Visual Studio 副本是自己注册的,所以默认值是我的名字。

AppData 是一个隐藏文件夹,如果您通过 Windows 资源管理器导航,它不会显示。但是,如果您将其键入运行命令,它将毫无问题地打开。

于 2013-06-21T21:44:09.400 回答
1

这取决于这是机器级设置还是用户级设置。

对于机器级设置,您项目中的 app.config 文件仅存储用于开发的原始设置,因此当您完成构建应用并将其部署到生产或交付给您的客户时,该默认值将首先存在安装。

在调试期间更改值时,您的程序(默认情况下)位于/bin/Debug/项目根目录之外的文件夹中。那里会有另一个 app.config 文件,其中包含项目作为文件名的一部分:project.app.config. 这是您保存的设置所在的位置。

这里要记住的重要一点是,默认情况下,您的应用程序部署到 Program Files 目录中的文件夹,并且标准用户默认情况下没有对该位置的写入权限。这意味着标准用户无法更改应用程序级别的设置。

对于用户级设置,会发生类似的过程。但是,有一个重要的区别。它与您的应用程序不在同一个文件夹中,而是使用您用户的 AppData 文件夹。这意味着标准用户确实具有写入权限,并且能够更改设置。但是,这意味着找到您的配置文件有点棘手,因为您必须防止两个具有相同名称的应用程序试图将配置文件存储在同一个文件夹中。

于 2013-06-21T21:51:20.450 回答
0

既然你做了

My.Settings.LastRunTime = lastRunTime
My.Settings.Save() '-----------------> maybe you forgot this

我确定您可以使用 .. 读取设置

lastRunTime = My.Settings.LastRunTime
于 2013-06-21T22:52:05.880 回答