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

shy*_*yam 163 .net c# app-config

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

有没有办法在应用程序设置完成后提示用户设置路径一次?

我得到的答案是"使用App.Config"...任何人都可以告诉这个App.config是什么以及如何在我的上下文中使用它?

Tim*_*ora 181

最简单的是,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>
Run Code Online (Sandbox Code Playgroud)

定义app.config后,可以使用ConfigurationManager类在代码中读取它.不要被详细的MSDN示例吓倒; 它实际上非常简单.

string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;
Run Code Online (Sandbox Code Playgroud)

写给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文件的工作方式似乎没有改变,但开发人员可以自由选择新的,更灵活的配置范例.

  • 另见这一篇:http://msdn.microsoft.com/en-us/library/a65txexh.a​​spx (2认同)

Fur*_*dar 46

简单地说,App.config是一种XML基于文件格式,用于保存应用程序级配置.

例:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="key" value="test" />
  </appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

您可以使用ConfigurationManager下面的代码片段中显示的方式访问配置:

var value = System.Configuration.ConfigurationManager.AppSettings["key"];
// value is now "test"
Run Code Online (Sandbox Code Playgroud)

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

var value = System.Configuration.ConfigurationSettings.AppSettings["key"];
Run Code Online (Sandbox Code Playgroud)

  • 您需要引用`System.Configuration.dll`才能使用上述API. (19认同)
  • 例如,您不应该在AppSettings部分中存储连接字符串,它们将进入ConnectionStrings部分.对于两个,如果通过设计器正确创建它们,Visual Studio将为您的设置生成强类型属性,您永远不需要手动输入键名称(就像您在上面的代码中一样). (2认同)
  • 我们在这里不是在谈论最佳实践,而是在谈论 OP 问题的解决方案。 (2认同)
  • System.Configuration.ConfigurationManager.AppSettings [“ Key”]`已经是一个字符串,对其调用ToString()是多余的。 (2认同)

Sys*_*own 6

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

请参阅这篇 MSDN 文章了解如何执行此操作。


小智 6

只是添加一些我在所有答案中遗漏的东西 - 即使一旦你知道它看起来很愚蠢和明显:

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

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

附言。我从 Visual Studio Code 开始,并使用“dotnet new”创建了一个新项目。在这种情况下没有创建配置文件,我确信还有其他情况。聚苯硫醚。您可能需要添加一个 nuget 包才能读取配置文件,如果是 .NET CORE,则为“dotnet add package System.Configuration.ConfigurationManager --version 4.5.0”