.NET用户范围应用程序设置文件路径问题

4
我正在使用 .Net Framework 3.5 及更高版本构建 Windows Forms 应用程序。我在使用用户范围的应用程序设置时遇到了问题。
当我第一次阅读有关用户范围应用程序设置的内容时,我理解我的应用程序将与用户相关联。我还从 MSDN 中了解到,设置将持久化存储在路径为%LOCALAPPDATA%\CompanyName\ProductName\ProductVersion下的 user.config 文件中,该值与字段 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 错误地声明的那样!)
此外,使用隔离存储也遇到了完全相同的问题。在隔离存储中,我在某个位置存储的所有数据在我重新定位 exe 文件时都无法访问,原因与应用程序设置中的问题相同。
我该如何解决这个问题,或者至少可以知道 .Net 中哈希命名约定的起源以及 Microsoft 决定根据这种方式考虑 exe 重定位时的推理是什么?
1个回答

1
我不知道为什么MSDN上的文档是错误的,但您应确保查看正确版本的文档。.net 3.5的文档可在https://msdn.microsoft.com/en-us/library/8eyb2ct1(v=vs.90).aspx找到。
此外,根据文档:
引用: 设置文件位置 app.exe.config和user.config文件的位置将基于应用程序的安装方式而异。(我的强调)
应用程序设置过程与部署紧密耦合,而您正在绕过它。 即使使用ClickOnce,某些部署策略也需要根据应用程序以编程方式获取先前版本的设置(https://msdn.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.getpreviousversion(v=vs.90).aspx)。
如果您需要在更新时手动复制.exe文件,也许自己编写用户设置对象并使用序列化会是更好的选择?然后,您可以将用户范围的设置存储在一个共同的位置(例如共享应用程序文件夹),并根据用户在应用程序启动时反序列化用户设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接