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

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

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

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

【问题讨论】:

  • 哪些方面不明白?文件何时加载?何时添加跟踪侦听器?究竟是什么?

标签: c# .net vb.net app-config


【解决方案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 一次并将其作为单例存储在内存中,以避免每次都产生开销。因此,这只是您第一次尝试跟踪配置文件已解析的内容,并且在后续调用中直接从内存中读取值。

      【讨论】:

        猜你喜欢
        • 2011-05-19
        • 2010-09-10
        • 1970-01-01
        • 1970-01-01
        • 2010-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-12
        相关资源
        最近更新 更多