我的 .NET 应用程序何时/如何使用其 App.Config 文件?

Posted

技术标签:

【中文标题】我的 .NET 应用程序何时/如何使用其 App.Config 文件?【英文标题】:When/How Does My .NET Application Use Its App.Config File? 【发布时间】:2012-01-31 00:59:10 【问题描述】:

我以前从未想过;但我最近了解了如何修改 app.config 文件以添加/删除跟踪侦听器(例如,将所有 Trace.WriteLine 输出重定向到文本文件)。

但我不太明白它是如何工作的?谁能解释一下?

我知道相应的 C# 代码与配置(在此示例中)执行相同的操作 - 该代码是否在我的应用程序入口点之前生成/执行?

【问题讨论】:

哪些方面不明白?文件何时加载?何时添加跟踪侦听器?究竟是什么? 【参考方案1】:

正如其他人已经解释的那样。我只是想更深入地解释一下。

在 .NET 中,您的 CLR 为您的应用程序创建一个虚拟边界。换句话说,当您的应用程序托管在 CLR 中时,它会为您的应用程序创建一个虚拟维度来玩转。它称为 AppDomain 或应用程序域。 这是您的应用程序读取 App.Config 文件以获取任何信息的阶段。因为有时您的 App.Config 会告诉 CLR 它应该寻找什么样的运行时程序集例如:CLR 2.0 程序集 如果您在 VS2010 中为 2.0 构建应用程序或首先为 4 创建项目然后切换到 2.0 目标,通常会看到这种情况。

【讨论】:

【参考方案2】:

应用程序每次启动时都会查看 app.config 文件。

您可以将任何设置存储在 app.config 文件中,动态添加或删除。

给你...

<appSettings>
    <add key="HospitalName" value="HML Hospital" />
    <add key="HospitalAddress" value="Madurai" />
    <add key="ServerName" value="SMSERVER" />
    <add key="DatabaseName" value="HospiCare" />
    <add key="DBUserID" value="sa" />    
    <add key="Theme" value ="Blue"/>
</appSettings>

然后你可以像下面这样改变

使用命名空间

using System.Configuration;

将您的配置文件读取为

string theme=ConfigurationManager.AppSettings("Theme");

并使用此修改

Configuration configFile = ConfigurationManager.OpenExeConfiguration(System.IO.Path.GetFileName(Application.ExecutablePath));
configFile.AppSettings.Settings(KeyName).Value = KeyValue;
configFile.Save();

如果你找到你的分析器,请接受并投票

【讨论】:

【参考方案3】:

该代码是否在我的应用程序入口点之前生成/执行?

将配置文件视为标准文本文件。如果您的应用程序代码不读取并对其执行任何操作,则不会发生任何事情。所以基本上,当您在 app.config 文件中定义某些部分时,您的应用程序(在 BCL 或自定义中)中有一些代码会在某些时候读取、解析和解释这些值。

那么,让我们考虑一下跟踪侦听器的例子。当您尝试跟踪代码中的某些内容时,底层 Trace 类将使用配置系统检查您在 app.config 中定义的值。此配置系统仅解析 XML 一次并将其作为单例存储在内存中,以避免每次都产生开销。因此,这只是您第一次尝试跟踪配置文件已解析的内容,并且在后续调用中直接从内存中读取值。

【讨论】:

以上是关于我的 .NET 应用程序何时/如何使用其 App.Config 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何知道应用程序何时被用户强行关闭?

安卓 back4app。如何回滚或何时是提交点(事务控制)

Asp.Net Identity2,如何检测 cookie 何时过期

我如何知道何时需要向app.module.ts添加内容?

App Engine 调度程序何时使用新线程与新实例?

何时以及为何托管 WCF 服务?