4

我正在使用 .Net Framework 3.5 及更高版本构建 Windows 窗体应用程序。我在使用用户范围内的应用程序设置时遇到问题。

当我第一次阅读用户范围应用程序设置时,我了解到我的应用程序会将设置与用户相关联。我还从 MSDN 了解到,这些设置将保留在路径下的user.config文件中:%LOCALAPPDATA%\CompanyName\ProductName\ProductVersion这与Application.LocalUserAppDataPath 参考 字段返回的确切值相同: http://msdn。 microsoft.com/en-us/library/8eyb2ct1.aspx

这里的问题是,MSDN 中关于文件路径的所有内容都是完全错误的。实验清楚地表明,文件路径实际上是:%LOCALAPPDATA%\companyname\appdomainname_eid_hash\verison

首先,我真的很想知道为什么这么重要的信息在 MSDN 中有错误的合理解释?

其次,这里的问题是我没有在 .Net 中使用部署方法(例如 Windows Installer 或 ClickOnce),我不打算使用它们,也不想使用它们。在这里,我只构建一个版本,他们将版本 exe 文件复制到主机。因为我没有使用安装程序,所以每次我更改程序集(即 exe 文件)的位置时,.Net Framework 都会将该程序集识别为不同的应用程序并为其创建一个具有不同哈希的新文件夹和一个新的 user.config 文件。这对我来说当然是一个问题,因为这意味着我正在考虑的不是“用户设置”,而是“用户和程序集设置”,这在逻辑上不适合我。我找不到用户可以将程序集重新定位到任何地方并且仍然可以访问相同设置文件的原因(正如 MSDN 错误地指出的那样!!)

此外,使用IsolatedStorage 时,我也面临同样的问题。同样在IsolatedStorage中,当程序集位于某个位置时,我存储的所有数据都完全无法访问,因为我重新定位exe文件的确切原因与应用程序设置问题中的确切原因相同。

我该如何解决这个问题,或者至少我可以知道带有散列的命名约定在.Net中的起源以及微软在决定相应地考虑exe重定位时可能做了什么推理?

4

1 回答 1

1

我不知道为什么 MSDN 上的文档不正确,但您应该确保您正在查看https://msdn.microsoft.com/en-us/library上的 .net 3.5 文档的正确版本/8eyb2ct1(v=vs.90).aspx

另外,根据文档:

设置文件位置

app.exe.config 和 user.config 文件的位置将根据应用程序的安装方式而有所不同。(我的重点补充)

应用程序设置过程与您正在绕过的部署紧密耦合。即使单击一次,某些部署策略也需要根据您的应用程序以编程方式获取以前的版本设置(https://msdn.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.getpreviousversion(v=vs.90 ).aspx )

如果要求每次更新时都需要手动复制 .exe,那么滚动您自己的用户设置对象并使用序列化可能是更好的选择?然后,您可以将用户范围的设置存储在公共位置,例如公共应用程序文件夹,并在应用程序启动时根据用户反序列化用户设置。

于 2015-04-16T19:52:53.050 回答