C#解决方案:为外部dll使用一个“Globals”项目?

时间:2010-08-22 08:25:55

标签: c# log4net

(抱歉,这可能是一个微不足道的问题,我来自Java& Maven,仍然没有把我的思想包裹在C#依赖项中)

我想在所有项目中使用log4net。由于我不想将dll添加到所有项目中,因此我创建了一个“Globals”项目,在其中添加对log4net.dll的引用,并将所有其他项目引用到“Globals”项目。

但是,我似乎无法从任何其他项目访问log4net类。

using Globals.log4net;

似乎也不起作用。

我做错了什么?

5 个答案:

答案 0 :(得分:3)

如果您所做的只是引用了DLL,那么您所做的就是在每次引用Globals项目时获取DLL的副本。您仍然没有使用库。

我通常会创建一个ILogger接口,使用Globals项目中的log4net实现它,并在其他项目中使用该实现(以及测试的模拟实现)。

答案 1 :(得分:2)

我担心这不是它的工作方式。 您必须将DLL添加到要从中调用它的所有项目。

如果你只在DLL中使用了几个函数,你可以在Globals项目中创建函数来调用它。

答案 2 :(得分:2)

log4net不仅仅通过引用在Globals中“生效”。

我的第一个倾向是让你的所有项目都引用log4net,它澄清了依赖,不需要在另一个项目中隐藏它。

但是,如果您的类之间共享共享逻辑,则可以使用“全局”或“公共”类,其中包括对共享库的引用。要引用这些库,只需添加目标命名空间的使用。

换句话说,无论引用是在同一个项目还是另一个引用项目中,using语句都是相同的。

对于log4net我相信它应该只是:

using log4net;

添加正确引用的另一种方法是在代码中键入其中一个类名(Logger?),然后使用“CTRL +”调用帮助程序菜单。或者通过简单地扩展它,可以选择添加正确的using语句。

答案 3 :(得分:0)

该系统不起作用。您必须添加log4net dll作为所有项目的参考。或者创建代理类,这是更多的工作。

答案 4 :(得分:0)

阅读GAC(全局程序集缓存),这是一个跨项目共享的DLL的中央存储...这就是我放置log4net DLL的地方。然后,您只需在.config文件forevery项目中添加对它的引用即可,无需将DLL添加到项目本身。

这是一个很好的起点:MSDN: Working with the Global Assembly Cache