我的 .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 文件?的主要内容,如果未能解决你的问题,请参考以下文章