[英]Setting properties of other assemblies using AssemblyInfo.cs and the mechanism behind it
我一直在努力让log4net在客户端的演示程序中工作,以便他们可以将它与代码库集成。 我在执行http://www.codeproject.com/Articles/14819/How-to-use-log4net时发现了这篇文章,其中一个步骤是
第2步:在AssemblyInfo.cs文件中添加以下行。
[assembly: log4net.Config.XmlConfigurator(ConfigFile="Web.config", Watch=true)] //For log4net 1.2.10.0
一旦我将这行代码添加到我的AssemblyInfo.cs,记录器就开始工作了。
我在这个地方做了一些谷歌搜索,试图理解为什么需要这一行,大多数文档和评论声称AssemblyInfo是用于可选的配置信息。 我不明白为什么添加这条线会使我的程序工作; 我的关键问题是 - 如何获取和使用AssemblyInfo.cs中的配置信息(并且有一些文档可以清楚地描述这一点) - log4net如何“知道”从AssemblyInfo.cs中获取该信息?
我理解Assembly关键字在AssemblyInfo.cs中的含义。 它允许在里面使用方法吗? 这些是组件上的属性,但不是它背后的机制。
好主题。 我无法提供一个链接,正如您所要求的那样,只有几点,调查结果。 我的一些陈述可能是众所周知的。 我想把它们放在一起,放在一个地方。 并给出答案如何触发log4Net设置的魔力 。
鉴于此,我们可以用属性做什么。 我们的(自定义)代码允许使用反射来检查是否存在属性,主要是特定的已知类型(例如XmlConfiguratorAttribute )。 如果存在这样的属性,我们可以“执行”它。 例如。 我正在使用具有“运行时”的ASP.NET MVC,它允许正确执行类型IFilter的任何属性。 它是MVC运行时,观察类和方法并显式执行这些属性。
AssemblyInfo.cs中单独声明的属性声明是不够的。 如上面的片段,其中声明了XmlConfiguration。 通常会有一些其他的调用(在ASP.NET中可能在Global.asax中)构建ILog
ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
好吧,在调用链的方法流程中的某个地方,Log4Net内部将检查是否存在:
var attributes = Attribute.GetCustomAttributes(thisAssembly, typeof(XmlConfiguratorAttribute));
如果是(程序集具有这样的属性) - log4Net可以使用它,强制它完成它的工作(例如从xml配置自己)
Log4net具有在调用程序XmlConfigurator
查找程序集级XmlConfigurator
属性的代码。
它读取它找到的属性的属性并适当地配置它自己。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.