我正在使用.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中使用Deployment方法(例如Windows Installer或ClickOnce),我不打算使用它们,我也不想使用它们。这里我只构建一个版本,然后将release exe文件复制到主机。因为我没有使用安装程序,所以每次更改程序集的位置(即exe文件)时,.Net Framework会将程序集识别为不同的应用程序,并使用不同的哈希为它创建一个新文件夹和一个新的user.config文件。这对我来说当然是一个问题,因为这意味着我正在考虑的不是“用户设置”,而是“用户和程序集设置”,它在逻辑上对我来说不合适。我没有找到用户可以将程序集重定位到任何地方并且仍然可以访问相同设置文件的原因(因为MSDN错误地说明了!!)
更重要的是,使用IsolatedStorage时,我面临同样的问题。同样在IsolatedStorage中,当程序集位于某个位置时,我存储的所有数据都完全无法访问,因为我重定位exe文件的原因与应用程序设置的问题完全相同。
我该如何解决这个问题,或者至少我可能知道.Net的命名约定源自.Net以及微软在决定相应考虑exe重定位时可能做的原因是什么?
答案 0 :(得分:1)
我对MSDN上的文档不正确的原因没有答案,但您应该确保查看https://msdn.microsoft.com/en-us/library/8eyb2ct1(v=vs.90).aspx
中找到的.net 3.5文档的正确版本另外,根据文件:
设置文件位置
app.exe.config和的位置 user.config文件将根据应用程序的不同而不同 安装。(我的重点补充)
应用程序设置进程与您正在绕过的部署紧密耦合。即使使用click-once,一些部署策略也需要以编程方式获取以前的版本设置,具体取决于您的应用程序(https://msdn.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.getpreviousversion(v=vs.90).aspx)
如果需要在每次更新时手动复制.exe,可能需要滚动自己的用户设置对象并使用序列化是更好的选择吗?然后,您可以将用户范围设置存储在公共位置(如公共应用程序文件夹),并在应用程序启动时根据用户反序列化用户设置。