0

我问这个的原因是如果 log4net.dll 不在 GAC 中,也不在当前的 Executing Assembly 目录中,casting Logging 工具将找不到它。

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

所以我只是想知道引用真正应该在哪里,因为如果我把它放在我的类库中,即使本地复制是真的,它也不会复制到客户端,我认为因为它实际上从未直接使用过。

4

1 回答 1

1

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

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

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

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

这个问题也在这个 SO question中讨论过

于 2012-11-27T22:03:21.683 回答