203

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

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

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

4

6 回答 6

213

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

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

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

应用程序级配置文件从全局配置文件(如 machine.config)继承设置。Web 应用程序也从 applicationHost.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 文件通常不是一个好主意,但听起来您只想执行一次设置。

请参阅:Change connection string & reload app.config at run time,其中描述了如何在运行时更新connectionStrings*.config 文件的部分。

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

App.Config 在运行时的位置

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

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

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

.NET 核心

.NET Core 引入了新的配置选项,并继续使用统一的 .NET(版本 5+)。*.config 文件的工作方式并没有从根本上改变,但开发人员可以自由选择新的、更灵活的配置范例。

与 .NET Framework 配置一样,.NET Core 可能会变得相当复杂,但实现可以像几行配置一样简单,只需几行 c# 即可读取。

于 2012-10-24T05:38:45.490 回答
63

简单地说,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"];
于 2012-10-24T05:43:41.427 回答
4

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

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

于 2012-10-24T05:40:21.697 回答
4

只是为了添加一些我从所有答案中遗漏的东西——即使你知道它似乎很愚蠢和显而易见:

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

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

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

于 2018-09-07T09:23:48.690 回答
2

您可以使用以下方式访问App.Config中的密钥:

ConfigurationSettings.AppSettings["KeyName"]

看看这个线程

于 2012-10-24T05:40:44.990 回答
0

只加一分

使用 app.config 一些您可以控制应用程序访问的方式,您希望将特定更改应用到整个应用程序使用应用程序配置文件,您可以访问以下设置 ConfigurationSettings.AppSettings["Key"]

于 2020-07-16T11:42:32.630 回答