如何使log4net.dll可选?

Oli*_*ter 5 c# log4net

我使用log4net在我的.NET应用程序中实现日志记录.但是,我不想为每个用户分发300kb log4net.dll,而是如果他有问题并且我希望他提供日志,则将此dll发送给用户.

那么,是否有可能让我的应用程序运行是否存在dll?当然,对于日志记录,将需要dll,但如果不需要日志记录,应用程序应该在没有dll的情况下运行.

Mar*_*der 5

对的,这是可能的。

首先创建一个包含所有日志方法的接口:

public interface ILogger
{
    void Write(string message);
    // And much more methods.
}
Run Code Online (Sandbox Code Playgroud)

现在创建两个实例,一个虚拟实例(我们称之为DummyLogger),以及一个将其消息发送到 Log4Net 的实例(Log4NetLogger)。

最后,创建一个工厂类:

static public class LogFactory
{
     static public ILogger CreateLogger()
     {
          if (/*Check if Log4Net is available*/)
               return new Log4NetLogger();
          else
               return new DummyLogger();
     }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过简单地检查文件是否在您的 bin 文件夹中来检查 Log4Net 是否可用。就像是:

File.Exists(AppDomain.CurrentDomain.BaseDirectory + "Log4Net.dll")
Run Code Online (Sandbox Code Playgroud)

但我可以想象您想要进行其他检查,例如它是否存在于 GAC 中或其他任何内容。

现在您可以使用您的工厂来创建记录器并将消息“写入”到日志中:

ILogger logger = LoggerFactory.CreateLogger();
logger.Write("I am logging something!");
Run Code Online (Sandbox Code Playgroud)