借助 Windows 窗体的应用程序设置,可以轻松地在客户端上创建、存储和维护自定义应用程序和用户首选项。 以下文档介绍了应用程序设置文件在 ClickOnce 应用程序中的工作原理,以及当用户升级到下一个版本时 ClickOnce 如何迁移设置。
以下信息仅适用于默认应用程序设置提供程序( LocalFileSettingsProvider 该类)。 如果提供自定义提供程序,该提供程序将确定它如何存储其数据,以及如何在版本之间升级其设置。 有关应用程序设置提供程序的详细信息,请参阅 应用程序设置体系结构。
应用程序设置文件
应用程序设置使用两个文件: <应用>.exe.config 和 user.config,其中 应用 是 Windows 窗体应用程序的名称。 应用程序首次存储与用户相关的设置时,user.config 在客户端上创建。 < > 相反,如果为设置定义默认值,则应用.exe.config将在部署之前存在。 使用 Visual Studio 发布 命令时,将自动包含此文件。 如果使用 Mage.exe 或 MageUI.exe创建 ClickOnce 应用程序,则必须在填充应用程序清单时确保此文件包含在应用程序的其他文件中。
注释
在 ClickOnce for .NET Core 3.1 和 .NET 5 或更高版本中,使用 dotnet-mage.exe 而不是 Mage.exe。 有关详细信息,请参阅 ClickOnce for .NET。
在未使用 ClickOnce 部署的 Windows 窗体应用程序中,应用程序的 <app>.exe.config文件存储在应用程序的目录中,而 user.config 文件存储在用户的 Documents and Settings 文件夹中。 在 ClickOnce 应用程序中, <应用>.exe.config 位于 ClickOnce 应用程序缓存内的应用程序目录中, user.config 位于该应用程序的 ClickOnce 数据目录中。
无论如何部署应用程序,应用程序设置都可确保对应用<.exe.config的安全读取访问>,以及对user.config的安全读/写访问。
在 ClickOnce 应用程序中,应用程序设置使用的配置文件的大小受 ClickOnce 缓存的大小约束。 有关详细信息,请参阅 ClickOnce 缓存概述。
.NET Core 和 .NET 5+
目前,需要用强名称密钥文件对要发布的 .NET Core 程序集进行签名。 如果条件不成立,ApplicationSettingsBase.Upgrade 方法在新的 ClickOnce 发布后不会正确复制设置。 可以在 “ 生成 > 强命名 ”选项下,在 .NET Core 项目的属性中指定强名称的使用。
版本升级
正如 ClickOnce 应用程序的每个版本都与所有其他版本隔离一样,ClickOnce 应用程序的应用程序设置也与其他版本的设置隔离。 当用户升级到应用程序的更高版本时,应用程序设置将最新(最高编号)版本的设置与更新版本提供的设置进行比较,并将设置合并到一组新的设置文件中。
下表介绍了应用程序设置如何决定要复制的设置。
| 更改类型 | 升级操作 |
|---|---|
| 将设置添加到<应用>.exe.config | 新设置已合并到当前版本的 <app>.exe.config |
| 从<应用>.exe.config 中删除的设置 | 旧设置已从当前版本的 <应用> 中删除.exe.config |
| 设置的默认更改;本地设置仍设置为 user.config 中的原始默认值 | 该设置将合并到当前版本的 user.config 中,并将新的默认值作为值 |
| 默认设置已更改;在 user.config 中设置为非默认值 | 该设置将合并到当前版本的 user.config 中,保留非默认值 |
如果您已经创建了自己的应用程序设置包装类,并希望自定义更新逻辑,可以重写该 Upgrade 方法。
ClickOnce 和漫游设置
ClickOnce 不支持漫游设置,这意味着您的设置文件不能随您跨网络上的计算机移动。 如果需要漫游设置,则需要实现通过网络存储设置的应用程序设置提供程序,或开发自己的自定义设置类,用于在远程计算机上存储设置。 有关设置提供程序的详细信息,请参阅 应用程序设置体系结构。