应用程序设置
应用程序设置使您能够动态存储和检索应用程序的属性设置和其他信息。 还使您能够维护客户端计算机上的自定义应用程序和用户首选项。 通常这些数据(如连接字符串)对于运行应用程序是非常重要的,并且您不想将这些数据直接包含在应用程序代码中。 也许想要存储两种不同的数据库连接字符串,并在运行时基于计算机的位置检索其中一个。 或者,想要存储用户的颜色首选项,然后在下一次运行应用程序时检索它们。
请注意,应用程序设置是 Visual Studio 的一项功能,该功能替换了早期版本中的动态属性功能(有关动态属性的信息,请参见使用动态属性配置应用程序)。
每个应用程序设置必须具有唯一的名称。 该名称可以是字母、数字或下划线的任意组合,但名称不能以数字开头且不能包含空格。 可通过 Name 属性来更改名称。
应用程序设置可以存储为可 XML 序列化或包含实现 ToString/FromString 的 TypeConverter 的任何数据类型。 最常见的类型有 String、Integer 和 Boolean,但也可以将值存储为 Color、Object 或连接字符串。
应用程序设置还包含值。 这些值通过**“值”**属性来设置,而且必须与设置的数据类型匹配。
此外,在设计时可将应用程序设置绑定到窗体或控件的属性。 有关更多信息,请参见 如何:添加或移除应用程序设置。
有两类基于范围的应用程序设置:
应用程序范围的设置可以用于诸如 Web 服务的 URL 或数据库连接字符串这类的信息。 这些值是与应用程序关联的。 因此,用户无法在运行时更改这些值。
用户范围的设置可以用于诸如保持窗体的最后位置或字体首选项这类的信息。 用户可以在运行时更改这些值。
可以使用**“范围”**属性更改设置类型。
项目系统将应用程序设置存储在两个 XML 文件中:一个是 app.config 文件,它是创建第一个应用程序设置时在设计时创建的;另一个是 user.config 文件,它是当运行应用程序的用户更改任何用户设置的值时在运行时创建的。 请注意,用户设置中的更改不会写到磁盘,除非应用程序专门调用某一方法这样做。
在设计时创建应用程序设置
在设计时,可用两种方法来创建应用程序设置:通过使用**“项目设计器”的“设置”页,或通过使用窗体或控件的“属性”**窗口,都可以让您将设置直接绑定到属性。 有关更多信息,请参见 如何:添加或移除应用程序设置。
当您创建应用程序范围的设置(例如,数据库连接字符串或对服务器资源的引用)时,Visual Studio 将它与 <applicationSettings> 标记一起保存在 app.config 文件中。 (连接字符串保存在 <connectionStrings> 标记下。)
当您创建用户范围的设置(例如,默认字体、主页或窗口大小)时,Visual Studio 将它与 <userSettings> 标记一起保存在 app.config 中。
安全说明 |
---|
当您将连接字符串存储在 app.config 中时,应该采取预防措施以避免泄露连接字符串中的敏感信息(如密码或服务器路径)。 如果从外部源获取连接字符串信息(如用户提供用户 ID 和密码),则必须小心以确保用于构造连接字符串的值不会包含可以更改连接行为的附加连接字符串参数。 可考虑使用“受保护的配置”功能以加密配置文件中的敏感信息。 有关更多信息,请参见保护连接信息 (ADO.NET)。 |
提示
由于没有类库的配置文件模型,应用程序设置不适用于类库项目。 Visual Studio Tools for Office DLL 项目是一个例外,它可以有一个配置文件。
使用自定义的设置文件
可以将自定义的设置文件添加到项目中,以方便进行设置组的管理。 单个文件中包含的设置会作为一个单元进行加载和保存。 因此,如果能够将常用组和不常用组的设置分开存储在单独的文件中,则可以节省加载和保存设置的时间。
例如,可以将诸如 SpecialSettings.settings 的文件添加到项目中。 虽然 SpecialSettings 类未在 My 命名空间中公开,但可以使用**“查看代码”**读取包含 Partial Class SpecialSettings 的自定义设置文件。
“设置设计器”首先搜索项目系统创建的 Settings.settings 文件;此文件是“项目设计器”在**“设置”**选项卡中显示的默认文件。 Settings.settings 位于 Visual Basic 项目的 My Project 文件夹和 Visual C# 项目的 Properties 文件夹中。 然后,“项目设计器”在项目的根文件夹中搜索其他设置文件。 因此,您应当将自定义的设置文件放在此根文件夹中。 如果将 .settings 文件添加到项目中的其他地方,则“项目设计器”将无法找到此文件。
在运行时访问或更改 Visual Basic 应用程序的设置
在 Visual Basic 项目中,您可以使用 My.Settings 对象在运行时访问应用程序设置。 在**“设置”页上,单击“查看代码”**按钮以查看 Settings.vb 文件。 (有关更多信息,请参见如何:访问设置事件。)Settings.vb 定义 Settings 类,此类使您能够处理设置类上的以下事件:SettingChanging、PropertyChanged、SettingsLoaded 和 SettingsSaving。 请注意,Settings.vb 中的 Settings 类是分部类,其中仅显示用户所有的代码,而不显示整个生成的类。 有关使用 My.Settings 对象访问应用程序设置的更多信息,请参见访问应用程序的设置 (Visual Basic)。
在运行时用户更改的任何用户范围的设置的值(例如窗体的位置)都存储在 user.config 文件中。 请注意,默认值仍保存在 app.config 中。
如果在运行期间(例如在测试应用程序过程中)已更改任何用户范围的设置,并要将这些设置重置为其默认值,请单击**“同步”**按钮。 有关此控件的信息,请参见“项目设计器” ->“设置”页。
强烈建议使用 My.Settings 对象和默认 .settings 文件来访问设置。 原因是可以使用“设置设计器”为设置分配属性,此外,还将在应用程序关闭之前自动保存用户设置。 但是,Visual Basic 应用程序可以直接访问设置。 在这种情况下,您必须访问 MySettings 类并使用项目根目录中的自定义 .settings 文件。 与处理 C# 应用程序时一样,在结束应用程序之前还必须保存用户设置;下一节会对此进行说明。
在运行时访问或更改 Visual C# 应用程序的设置
在 Visual Basic 以外的语言(如 Visual C#)中,必须直接访问 Settings 类,如下面的 Visual C# 示例中所示。
Properties.Settings.Default.FirstUserSetting = "abc";
还必须显式调用此包装类的 Save 方法,才能持久地保存用户设置。 此操作通常在主窗体的 Closing 事件处理程序中完成。 下面的 Visual C# 示例演示对 Save 方法的调用。
Properties.Settings.Default.Save();
有关如何创建新应用程序设置并将它们绑定到窗体属性的具体示例,请参见如何:使用设计器创建应用程序设置。 有关通过 Settings 类访问应用程序设置的更多常规信息,请参见应用程序设置概述。