我正在使用 .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 重定位时的推理是什么?
当我第一次阅读有关用户范围应用程序设置的内容时,我理解我的应用程序将与用户相关联。我还从 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 重定位时的推理是什么?