什么是C#.NET中的App.config?如何使用它?


179

我已经在C#.NET中完成了一个项目,其中我的数据库文件是Excel工作簿。由于连接字符串的位置在我的编码中是硬编码的,因此在我的系统中安装它没有问题,但是对于其他系统来说,是存在问题的。

应用程序设置完成后,是否有办法提示用户设置路径?

我得到的答案是“使用App.Config” ...谁能在这里告诉我什么是App.config以及如何在我的上下文中使用它?


Answers:


190

简单来说,app.config是一个XML文件,其中包含许多可用的预定义配置部分,并支持自定义配置部分。“配置部分”是XML的代码段,具有用于存储某种类型信息的模式。

可以使用诸如connectionStrings或的内置配置节来配置设置appSettings。您可以添加自己的自定义配置部分;这是一个高级主题,但是对于构建强类型的配置文件非常有用。

Web应用程序通常具有web.config,而Windows GUI /服务应用程序具有app.config文件。

应用程序级配置文件从全局配置文件(例如machine.config)继承设置。

从App.Config中读取

连接字符串具有可以使用的预定义架构。请注意,这个小片段实际上是有效的app.config(或web.config)文件:

<?xml version="1.0"?>
<configuration>
    <connectionStrings>   
        <add name="MyKey" 
             connectionString="Data Source=localhost;Initial Catalog=ABC;"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

一旦定义了app.config,就可以使用ConfigurationManager类以代码形式读取它。不要被冗长的MSDN示例所吓倒;实际上很简单。

string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;

写入App.Config

经常更改* .config文件通常不是一个好主意,但听起来您只想执行一次设置。

请参阅:在运行时更改连接字符串并重新加载app.config,其中描述了如何在运行时更新connectionStrings* .config文件的部分。

请注意,理想情况下,您可以通过简单的安装程序执行此类配置更改。

App.Config在运行时的位置

:假设我手动更改了<value>app.config中的某些内容,将其保存然后关闭。现在,当我进入我的bin文件夹并从此处启动.exe文件时,为什么它不反映已应用的更改?

:编译应用程序时,会将其app.config复制到bin目录1中,其名称与exe匹配。例如,如果您的exe文件名为“ test.exe”,则bin目录中应该有一个“ text.exe.config”。您可以在不重新编译的情况下更改配置,但是您需要编辑在编译时创建的配置文件,而不是原始的app.config。

1:请注意,不会移动web.config文件,而是在编译和部署时将其保留在同一位置。一个例外是web.config 转换时

.NET核心

.NET Core引入了新的配置选项。* .config文件的工作方式似乎没有改变,但是开发人员可以自由选择新的,更灵活的配置范例。


另请参阅:codeproject.com/Articles/16466/…有关配置文件如何工作的概述
BKSpurgeon 2015年

56

简而言之,App.config是一种XML基于文件的格式,其中包含应用程序级别配置

例:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="key" value="test" />
  </appSettings>
</configuration>

您可以通过使用ConfigurationManager下面的代码片段所示来访问配置:

var value = System.Configuration.ConfigurationManager.AppSettings["key"];
// value is now "test"

注意:这 ConfigurationSettings是检索配置信息的过时方法。

var value = System.Configuration.ConfigurationSettings.AppSettings["key"];

21
您需要参考System.Configuration.dll才能使用上述API。
KFL 2014年

2
首先,您不应将连接字符串存储在AppSettings部分中,而将它们存储在ConnectionStrings部分中。对于第二种情况,如果您通过设计器正确创建设置,Visual Studio将为您的设置生成强类型化的属性,您无需再手动键入键名(就像上面的代码一样)。
BrainSlugs83 '16

1
我们在这里不是在讨论最佳实践,而是在解决OP问题。
Furqan Safdar

2
System.Configuration.ConfigurationManager.AppSettings["Key"]已经是一个字符串,调用ToString()它是多余的。
BogdanStăncescu17年

4

只是添加一些我在所有答案中都缺少的内容-即使您一知道它似乎很愚蠢和明显:

该文件必须命名为“ App.config”或“ app.config”,并且可以与Program.cs位于同一级别的文件中。

我不知道其他位置是否可行,其他名称(如ODP.net文档中建议的application.conf)对我不起作用。

PS。我从Visual Studio Code开始,并使用“ dotnet new”创建了一个新项目。在这种情况下,不会创建任何配置文件,我确定还有其他情况。PPS。您可能需要添加一个nuget程序包才能读取配置文件,如果是.NET CORE,它将是“ dotnet添加程序包System.Configuration.ConfigurationManager --version 4.5.0”。


这就是我想要的。需要知道将其包括在哪个级别。一些程序/框架在文件夹中看起来像/resources
Alex

3

App.Config是一个XML文件,用作您的应用程序的配置文件。换句话说,您可以在其中存储任何想要更改的设置,而不必更改代码(并重新编译)。它通常用于存储连接字符串。

请参阅有关如何执行此MSDN文章


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.