在Windows Forms C#应用程序中拥有配置文件的最简单方法
我对.NET真的很陌生,但仍然对配置文件的工作原理一无所知。
每次我在google上搜索它时,都会得到关于web.config的结果,但是我正在编写Windows窗体应用程序。
我发现我需要使用System.Configuration命名空间,但是文档没有帮助。
如何定义我的配置文件是XYZ.xml?还是它对配置文件有一个"默认"名称?我还是不明白。
另外,如何定义一个新部分,是否真的需要创建一个从ConfigurationSection继承的类?
我只想拥有一个配置文件,其中包含一些像这样的值:
<MyCustomValue>1</MyCustomValue> <MyCustomPath>C:\Some\Path\Here</MyCustomPath>
有没有简单的方法可以做到这一点?我们能以一种简单的方式解释如何从一个简单的配置文件中读取和写入吗?
解决方案
我们正在使用哪个版本的.Net和VS?
创建新项目时,解决方案中应该有一个名为app.config的文件,这是默认配置文件。
我们要使用App.Config。
当我们将新项目添加到项目中时,会出现一个称为"应用程序配置"文件的文件。加上那个。
然后,在"配置/应用程序设置"部分中添加密钥
喜欢:
<configuration> <appSettings> <add key="MyKey" value="false"/>
通过执行访问成员
System.Configuration.ConfigurationSettings.AppSettings["MyKey"];
这适用于.net 2及更高版本。
有关.NET应用程序配置的最佳(IMHO)文章位于CodeProject上,它揭示了.NET 2.0配置的奥秘。关于.net配置文件中的节,我的下一篇最喜欢的(简短的)文章是"了解节处理程序App.config文件"。
在Windows窗体中,我们有一个app.config
,与web.config
非常相似。但是由于我看到我们需要的是自定义值,因此建议我们使用"设置"。
为此,请打开项目属性,然后转到设置。如果设置文件不存在,我们将具有一个创建链接。然后,我们可以将设置添加到在那里看到的表中,该表将生成适当的XML和可用于加载和保存设置的Settings类。
设置类将被命名为" DefaultNamespace.Properties.Settings"。然后,我们可以使用类似于以下内容的代码:
using DefaultNamespace.Properties; namespace DefaultNamespace { class Class { public int LoadMySettingValue() { return Settings.Default.MySettingValue; } public void SaveMySettingValue(int value) { Settings.Default.MySettingValue = value; } } }
我们应该创建一个App.config文件(非常类似于web.config)
我们应该右键单击项目,添加新项,新的"应用程序配置文件"。
确保使用System.Configuration添加到项目中。
然后我们可以为其添加值
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="setting1" value="key"/> </appSettings> <connectionStrings> <add name="prod" connectionString="YourConnectionString"/> </connectionStrings> </configuration>
private void Form1_Load(object sender, EventArgs e) { string setting = ConfigurationManager.AppSettings["setting1"]; string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString; }
请注意,根据Microsoft的说法,我们应该使用ConfigurationManager而不是ConfigurationSettings。 (请参阅备注部分)
" ConfigurationSettings类仅提供向后兼容性。对于新应用程序,应改用ConfigurationManager类或者WebConfigurationManager类。"
配置文件的默认名称是[yourexe] .exe.config。因此,notepad.exe将在与该程序相同的文件夹中有一个名为notepad.exe.config的配置文件。这是CLR和Framework各个方面的常规配置文件,但可以在<appSettings>节点下包含我们自己的设置。
" <appSettings>"元素创建一个名称-值对的集合,这些名称/值对可以作为" System.Configuration.ConfigurationSettings.AppSettings"来访问。但是,无法将更改保存回配置文件。
也可以将自己的自定义元素添加到配置文件中,例如,通过创建实现IConfigurationSectionHandler的类并将其添加到配置文件的<configSections>元素中来定义结构化设置。然后,我们可以通过调用ConfigurationSettings.GetConfig来访问它。
.NET 2.0添加了一个新类" System.Configuration.ConfigurationManager",该类支持多个文件,并且每个用户都覆盖每个系统数据。它还支持将修改后的配置保存回设置文件。
Visual Studio创建一个名为" App.config"的文件,在构建项目时,它将使用正确的名称复制到EXE文件夹。
澄清先前的答案...
1)将新文件添加到项目中(添加->新建项->应用程序配置文件)
2)新的配置文件将在解决方案资源管理器中显示为App.Config。
3)使用以下模板将设置添加到此文件中
<configuration> <appSettings> <add key="setting1" value="key"/> </appSettings> <connectionStrings> <add name="prod" connectionString="YourConnectionString"/> </connectionStrings> </configuration>
4)像这样检索它们:
private void Form1_Load(object sender, EventArgs e) { string setting = ConfigurationManager.AppSettings["setting1"]; string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString; }
5)构建后,输出文件夹将包含一个名为<assemblyname> .exe.config的文件。这将是App.Config文件的副本。开发人员无需做进一步的工作即可创建此文件。
我同意将我们指向app.config的其他答案。但是,我们应该创建一个实用程序类(AppSettings是我使用的名称)来读取它们并将它们公开为属性,而不是直接从app.config中读取值。 AppSettings类可用于聚合来自多个商店的设置,例如来自app.config的值和来自程序集(AssemblyVersion和AssemblyFileVersion)的应用程序版本信息。
通过快速阅读以前的答案,它们看起来是正确的,但是看起来好像没有人提到VS 2008中的新配置功能。它仍然使用app.config(在编译时复制到YourAppName.exe.config),但是有一个UI小部件可以设置属性并指定其类型。在项目的"属性"文件夹中,双击" Settings.settings"。
最好的部分是,从代码访问此属性是类型安全的,编译器将捕获明显的错误,例如将属性名称弄乱。例如,将以如下方式访问app.config中名为MyConnectionString的属性:
string s = Properties.Settings.Default.MyConnectionString;
System.Configuration.ConfigurationSettings.AppSettings [" MyKey"];
AppSettings已被弃用,现在被认为已过时。
[ 关联 ]
此外,app.config的appSettings部分已由applicationSettings部分替换。
正如其他人所述,我们应该使用System.Configuration.ConfigurationManager
[链接]这是.Net 2.0的新功能
一种非常简单的方法是使用我们自己的自定义Settings
类。