我以前从未想过这件事;但我最近学会了如何修改app.config文件以添加/删除跟踪侦听器(例如,将所有Trace.WriteLine输出重定向到文本文件)。
但我不太明白它是如何运作的?有人可以解释一下吗?
我知道相应的C#代码与配置相同(在本例中) - 该代码是否在我的应用程序入口点之前生成/执行?
答案 0 :(得分:8)
是否在我的应用程序入口点之前生成/执行了该代码?
将配置文件视为标准文本文件。如果您的应用程序代码没有阅读并对其执行任何操作,则不会发生任何事情。所以基本上当你在app.config文件中定义一些部分时,你的应用程序中有一些代码(在BCL或自定义中),在某些时候会读取,解析和解释这些值。
所以,让我们考虑跟踪侦听器的示例。当您尝试在代码中跟踪某些内容时,底层Trace类将使用配置系统来检查您在app.config中定义的值。此配置系统仅解析XML一次,并将其作为单例存储在内存中,以避免每次开销。因此,它只是您第一次尝试跟踪配置文件被解析的内容,并且在后续调用中,这些值直接从内存中读取。
答案 1 :(得分: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");
并使用此
进行修改Configuration configFile = ConfigurationManager.OpenExeConfiguration(System.IO.Path.GetFileName(Application.ExecutablePath));
configFile.AppSettings.Settings(KeyName).Value = KeyValue;
configFile.Save();
如果找到你的anser
,请接受并投票答案 2 :(得分:3)
正如其他人已经解释的那样。我希望能更深入地解释一下。
在.NET中,您的CLR为您的应用程序创建虚拟边界。换句话说,当您的应用程序在CLR中托管时,它会为您的应用程序创建一个虚拟维度。它叫做AppDomain或Application Domain。 这是您的应用程序读取App.Config文件以获取任何信息的阶段。因为有时你的App.Config会告诉CLR它应该寻找什么样的运行时程序集ex:CLR 2.0程序集如果你在VS2010 for 2.0中构建应用程序或者首先创建4项目然后切换到2.0目标,通常会看到这种情况。