C#解决方案:是否可以使用一个“Globals”项目来管理外部dll?

5

(很抱歉可能是一个琐碎的问题,我来自Java和Maven,仍然没有理解C#依赖关系)

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

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

using Globals.log4net;

似乎也不起作用。
我做错了什么?

1
你是如何在“Globals”中暴露log4net的? - Oded
5个回答

3
如果你只是引用了DLL,那么你所做的就是在每个对你的Globals项目的引用中获取DLL的一个副本。你仍然没有使用这个库。
我通常会创建一个ILogger接口,在Globals项目中使用log4net实现它,并在其他项目中使用该实现(以及测试的模拟实现)。

1
添加引用只是意味着您的程序集现在依赖于所引用的库,因此它会被复制到程序集使用的每个位置。但是,如果您的程序集不公开或使用所引用库的任何功能,则无法使用它。 - Oded
这是一个不错的解决方案,但实际上它正在创建一个包装器,而我并不真正需要或想要它。 - Yossale
那么您可能需要在所有需要它的项目中引用log4net。这使依赖关系清晰,并且很可能是您需要的。使用“Globals”共享代码和功能。 - Oded

2

很抱歉,那不是它的工作方式。您必须将DLL添加到您想要从中调用它的所有项目中。

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


2

log4net并不是只通过引用就能在Globals中使用。

我的第一反应是让所有项目都引用log4net,这样就清楚了有一个依赖关系,不需要隐藏在另一个项目中。

然而,如果您的类之间有共享的通用逻辑,您可以创建一个“全局”或“公共”类,其中包括对共享库的引用。要引用这些库,只需添加目标命名空间的using语句即可。

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

对于log4net,我认为应该只是:

using log4net;

另一种添加适当引用的方法是在代码中输入一个类名(例如Logger),然后使用“CTRL+.”或展开辅助菜单,这将提供添加适当using语句的选项。请注意保留HTML标签。

0

那个系统行不通。你需要将log4net dll添加为所有项目的引用。或者创建代理类,这需要更多的工作。


0

了解一下GAC(全局程序集缓存),这是一个中央存储库,用于共享跨项目的DLL...这就是我放置log4net DLL的地方。然后,您可以在.config文件中为每个需要使用它的项目简单地添加对它的引用,而无需将DLL添加到项目本身中。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接