提问人:Cleo 提问时间:10/24/2016 最后编辑:Cleo 更新时间:7/11/2023 访问量:3013
Settings.Default.Upgrade() 不保留当前设置
Settings.Default.Upgrade() does not keep current settings
问:
我有一个使用内置设置功能的 WPF 应用程序。当我发布应用程序的新版本时,我会增加程序集版本,并在应用程序启动时执行以下代码:
if (Settings.Default.IsSettingsUpgradeRequired) //this defaults to true when a new version of this software has been released
{
Settings.Default.Upgrade(); //upgrade the settings to the newer version
Settings.Default.Reload();
Settings.Default.IsSettingsUpgradeRequired = false;
Settings.Default.LastSettingsUpdate = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
Settings.Default.Save();
}
问题是没有保留以前的设置。相反,每次出现新版本时,都会在 \AppData\Local\ 下创建一个新文件夹。因此,将使用默认设置,而不是以前版本的设置。我知道,在正常情况下,应该有一个文件夹包含许多子文件夹,其名称为应用程序的版本。相反,我有许多文件夹,每个文件夹只包含一个以应用程序版本为名称的文件夹。 Local\ 中的文件夹结构如下所示:
- myApp.exe_Url_5s2axp5sywfyhblm3201qetpqnmwnvsc
- myApp.exe_Url_ft4ih1ze0qsz5abu11t334omxo1431c0
- myApp.exe_Url_glsc2d3cjmswry2bxebb53jndfptav1x
- myApp.exe_Url_qngn1rqmbfyy42fdgpmc3ystsaknuxnv
- myApp.exe_Url_vqn0ogftrchl1fild5fe34hmijvmd2zr
那么,如何停止系统创建如此多的文件夹,并使其每个应用程序仅使用一个文件夹,以便我可以正确升级我的设置呢?
编辑:我今天注意到的另一件事是,如果我更改应用程序文件夹的位置(例如将其从桌面移动到 C:\myApp),应用程序会在首次启动时创建一个新的设置文件夹。为什么系统无法将其识别为同一应用程序?
答:
我终于让它工作了。我不知道这种行为的原因,但以下两件事之一解决了它:
- 添加了默认清单文件并更改了“assemblyIdentity”节点(“version”属性似乎对设置没有影响)
- 激活了 Visual Studio 的签名功能(项目属性 --> 签名)
评论
项目 -> 属性 -> 应用程序 -> 清单 = 使用默认设置嵌入清单
@cleo 感谢您的解决方案。签名解决了这个问题。文件夹名称不再更改。
\AppData\Local\MyAppName.exe_StrongName_iyq1qat10dlrezghdzsmthpr49hlodkj
评论
我正在使用 .NET6 在 2022 年,只是在应用程序启动期间添加它对我有用:
Settings.Default.Upgrade();
激活的签名将确保在
\AppData\Local\
在应用程序启动后也必须执行Settings.Default.Upgrade()
有点晚了,但为了完整起见:
我不确定以前的版本是如何处理的,但是当我将我的 Winforms 应用程序迁移到 .NET 8 时,它被破坏了,其他答案中提到的内容都没有帮助。Settings.Default.Upgrage()
就我而言,看似罪魁祸首是该应用程序同时使用本地和漫游设置,因此在不同的文件夹中创建了 2 个文件。这在某种程度上干扰了设置升级。user.config
将所有设置(用户级别和应用程序级别)更改为 后,Visual Studio 以无提示方式将文件添加到项目中,并且设置开始正确升级。从技术上讲,我仍然不确定是缺少文件还是设置的存在,但无论哪种方式,它都修复了它们。Local
app.config
app.config
Roaming
HTH型
评论
Reload()