91

我真的是 .NET 的新手,但我仍然不了解配置文件的工作原理。

每次我在谷歌上搜索它时,我都会得到关于 web.config 的结果,但我正在编写一个 Windows 窗体应用程序。

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

如何定义我的配置文件是 XYZ.xml?或者它是否有配置文件的“默认”名称?我还是没明白。

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

我只想有一个具有如下值的配置文件:

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

有没有简单的方法来做到这一点?您能否以简单的方式解释如何读取/写入一个简单的配置文件?

4

11 回答 11

127

您想使用 App.Config。

当您向项目中添加新项目时,会有一个称为应用程序配置文件的东西。添加那个。

然后在 configuration/appsettings 部分添加键

像:

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

通过做访问成员

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

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

于 2008-09-22T12:29:32.623 回答
70

澄清以前的答案...

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

于 2008-09-22T12:53:48.510 回答
28

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

最好的部分是从代码中访问这个属性是类型安全的——编译器会发现一些明显的错误,比如错误地输入了属性名。例如,app.config中名为 MyConnectionString 的属性将被访问为:

string s = Properties.Settings.Default.MyConnectionString;
于 2008-09-23T00:56:10.520 回答
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 类。”

于 2008-09-22T12:39:17.937 回答
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 文件夹中。

于 2008-09-22T12:46:49.713 回答
6

关于 .NET 应用程序配置的最佳(恕我直言)文章位于 CodeProject,揭开 .NET 2.0 配置的奥秘。我下一篇关于 .NET 配置文件中部分的最喜欢(较短)的文章是理解部分处理程序 - App.config 文件

于 2008-09-22T12:30:17.100 回答
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;
        }
    }
}
于 2008-09-22T12:33:27.187 回答
2

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

于 2008-09-22T13:17:33.290 回答
2

一个非常简单的方法是使用您自己的自定义Settings

于 2009-03-01T02:25:24.797 回答
1

采用:

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

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

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

正如其他人提到的,您应该使用 System.Configuration.ConfigurationManager ( link ),它是 .NET 2.0 的新功能。

于 2008-11-28T15:44:32.440 回答
0

您使用的是什么版本的 .NET 和 Visual Studio?

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

于 2008-09-22T12:29:29.397 回答