繁体   English   中英

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

[英]C# solutions : using one “Globals” project for external dll's?

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

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

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

using Globals.log4net;

似乎也没有用。

我究竟做错了什么?

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

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

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

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

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

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

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

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

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

using log4net;

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

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

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

这是一个很好的起点: MSDN:使用全局程序集缓存

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM