在Windows Forms C#应用程序中拥有配置文件的最简单方法


88

我真的是.NET的新手,但是我仍然对配置文件的工作原理一无所知。

每次我在Google上进行搜索时,都会得到有关web.config的结果,但是我正在编写Windows Forms应用程序。

我发现我需要使用System.Configuration命名空间,但是文档没有帮助。

如何定义我的配置文件是XYZ.xml?还是配置文件具有“默认”名称?我还是不明白。

另外,如何定义新部分?我真的需要创建一个从ConfigurationSection继承的类吗?

我只想拥有一个带有以下值的配置文件:

<MyCustomValue>1</MyCustomValue>
<MyCustomPath>C:\Some\Path\Here</MyCustomPath>

有一个简单的方法吗?您能以一种简单的方式解释如何从一个简单的配置文件中读取和写入吗?


1
您的.NET版本是什么?对于2.0及更高版本,有一种非常可爱的方式称为“设置”。
Thomas

1
@七,这是一个错字,但它的意思可能是“举例说明” :)
Fabio Gomes

Answers:


121

您要使用App.Config。

当您将新项目添加到项目时,会有一个称为“应用程序配置”文件的文件。加上那个。

然后在配置/应用程序设置部分添加密钥

喜欢:

<configuration>
 <appSettings>
  <add key="MyKey" value="false"/>

通过执行访问成员

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

这适用于.NET 2及更高版本。


2
实际上,从v1.0开始,它可以在所有.NET版本中使用。.NET 2.0中的新类是ConfigurationManager。
Mike Dimmick

4
我个人使用“应用程序属性”(仅适用于Framework 2.0及更高版本)上的“设置”选项卡,因为Visual Studio将为您的设置代码生成强类型属性。它们还可以包括在运行时读取/写入的“用户”设置。
阿德里安·克拉克

@Mike是的,我有这种感觉,但我不太确定。我没有对1做太多工作
。– qui

26
请注意,ConfigurationSettings已过时,请使用System.Configuration.ConfigurationManager.AppSettings["MyKey"];
JNF

16
另外请注意,要使用System.Configuration.ConfigurationManager您的项目,请参考System.Configuration.dll
dmeglio 2015年

66

澄清先前的答案...

  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文件的副本。开发人员无需做进一步的工作即可创建此文件。


1
这对我很有用。还有两点:在将新文件添加到项目中时,当我单击对话框左侧的“常规”节点时找到了“应用程序配置文件”。为了在我的代码中使用ConfigurationManager类,我必须将System.Configuration DLL添加到我的引用中。
John Gilmer

28

通过快速阅读以前的答案,它们看起来很正确,但是看起来好像没有人提到Visual Studio 2008中的新配置功能。它仍然使用app.config(在编译时复制到YourAppName.exe.config),但是有一个UI小部件可以设置属性并指定其类型。双击项目的“属性”文件夹中的Settings.settings

最好的部分是,从代码访问此属性是类型安全的-编译器将捕获明显的错误,例如错误地输入属性名称。例如,将以如下方式访问app.config中名为MyConnectionString的属性:

string s = Properties.Settings.Default.MyConnectionString;

这在VS2005中可用。
Greg D

5
很好,但是它(项目属性|设置)生成必须编译的代码。如果要更改设置,则需要向客户发布新的二进制文件。
JohnL4 2013年

@ JohnL4,如果这些设置在“用户”范围内,则可以通过编程方式进行更改,例如Settings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits

10

您应该创建一个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类。”


很有帮助。解决了我的问题给T.
JCMorris

在Visual Studio 2015中:单击项目>添加引用。向下滚动以找到System.Configuration。单击“确定”,然后根据Nathan的注释更新代码行。
Robot70 '17

7

配置文件的默认名称是[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文件夹。



3

在Windows窗体中,您具有该app.config文件,该文件与该web.config文件非常相似。但是由于我看到您需要的是自定义值,因此建议您使用Settings

为此,请打开项目属性,然后转到设置。如果设置文件不存在,您将具有一个创建链接。然后,您可以将设置添加到在那里看到的表中,该表将生成适当的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;
        }
    }
}

2

我同意将您指向app.config的其他答案。但是,您应该创建一个实用程序类(AppSettings是我使用的名称)来读取它们并将它们公开为属性,而不是直接从app.config中读取值。AppSettings类可用于聚合来自多个商店的设置,例如来自app.config的值和来自程序集(AssemblyVersion和AssemblyFileVersion)的应用程序版本信息。



1

用:

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

AppSettings已被弃用,现已视为过时(链接)。

此外,app.config的appSettings部分已由applicationSettings替换部分。

就像其他人提到的那样,您应该使用System.Configuration.ConfigurationManager(link),它是.NET 2.0的新增功能。


不推荐使用ConfigurationSettings而非AppSettings。
Toby

0

您正在使用哪个版本的.NET和Visual Studio?

创建新项目时,解决方案中应该有一个名为app.config的文件。这是默认配置文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.