解决方案中的log4net和多个启动项目

log4net and multiple start-up projects in solution

我们在解决方案中有很多项目,并且有相当多的项目充当某些 class 库项目的测试项目。 Project Vis 和 Project Test 都可以作为启动项目,或者 Project Test 可以作为独立于 Project Vis 之外的进程启动。他们都专注于 class 库 Project Calc。 因此,如果我使用 Project Test 测试 Project Calc,那么 log4net 可以正常工作。但是,如果我使用 Project Vis(这是一个仍在 VS2010 中的 Visual Studio 插件)作为启动项,然后启动 Project Test 来测试 Project Calc,我就会遇到问题。

Could not load file or assembly 'log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a' or one of its dependencies. The system cannot find the file specified.

这是从 Project Calc.class 的构造函数中抛出的。

Project Calc 中代码的内部配置略有不同,我们在其中使用 CodeDom 构建一些 C# 文件并将其编译为项目 C 使用的单独 dll(查看 aevitas 答案 ) , 我收到了:

System.TypeInitializationException was unhandled Message: The type initializer for 'Test' threw an exception.

我觉得这也跟log4net的实现有关

我在所有项目中都有指向外部 log4net 配置文件的链接,并且在每个项目中都有以下行:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4NetSettingsGlobal.xml", Watch = true)]

和以下行一次在每个 class 中,我从那里调用日志方法:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

所以问题可能是因为 Project Vis 已经配置了 log4net,然后启动了 Project T? 我该如何解决这个问题,以便我可以适应这两种情况? (也就是说,项目 T 也在自己执行以测试项目计算。)

您的 log4net dll 似乎没有复制到您的 bin 目录中。检查 dll 是否存在,如果不存在,请配置您的项目以将其复制到您的 bin 目录。当 运行 as addin.

时,您可以通过手动将 log4net dll 复制到您的 bin 目录中来轻松测试它