如果使用Castle LoggingFacility,客户端应用程序是否仍需要引用Log4Net?

时间:2012-11-27 20:06:03

标签: castle-windsor castle

我问这个问题的原因是如果log4net.dll不在GAC中而不在当前的Executing Assembly目录中,则Castle logging工具将无法找到它。

我已经构建了一个类库,多个客户端应用程序将使用它来使用Castle和Windsor进行日志记录,我注意到我根本不需要在类库中引用log4net.dll,它只需要能够在运行时看到dll。

所以我只是想知道引用应该在哪里,因为如果我放入我的类库,它就不会复制到客户端,即使copy local为true,我认为因为它实际上从未直接使用过。

1 个答案:

答案 0 :(得分:1)

您肯定需要提供log4net.dll才能使Castle记录工具正常工作(假设您已将日志记录工具配置为使用log4net)。你不再需要在项目中直接引用log4net是正确的,因为你现在将使用Castle.Core的ILogger接口来实际写入日志消息。您的应用程序仍然依赖于log4net,尽管是间接的。

Visual Studio通常会正确处理这些“间接”引用(A依赖于B依赖于C)(它将C复制到A的输出目录)。但是,当C位于执行构建的计算机上的GAC中时,它复制间接引用(它不会将C复制到A的输出目录)。

我的猜测是你的开发机器上有log4net.dll GAC。

要解决此问题,您需要从GAC(以及将要构建应用程序的任何计算机上的GAC)中删除log4net.dll,或者您必须显式引用log4net。您的顶级可执行文件中的dll(上例中的项目A)将“copy local”设置为true。这会强制编译器将dll复制到输出目录。

此问题也在this SO question

中讨论过