2011-12-31 36 views
10

我从来没有想过它;但我最近学会了如何修改app.config文件以添加/删除跟踪侦听器(例如,将所有Trace.WriteLine输出重定向到文本文件)。我的.NET应用程序何时/如何使用其App.Config文件?

但我不太明白它是如何工作的?有人可以解释一下吗?

我知道相应的C#代码做与config(在这个例子中)相同的代码是否在我的应用程序的入口点之前生成/执行?

+1

你不了解什么方面?当文件加载?何时添加跟踪侦听器?究竟是什么? – Oded 2011-12-31 10:51:43

回答

8

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

想象一个配置文件就像一个标准的文本文件。如果你的应用程序代码没有阅读并且没有做任何事情,那什么都不会发生。所以基本上当你在app.config文件中定义一些部分时,应用程序中有一些代码(在BCL或自定义中),在某些时候会读取,解析和解释这些值。

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

5

每次启动应用程序时,应用程序都会查看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"); 
如下

和mod通过使用这种

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

接受并投票,如果你发现你的雁

3

如前所述其他人解释IFY。我只想解释我希望更深的一点。

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

相关问题