如何解决c#中的重复命名空间

时间:2011-09-06 14:49:02

标签: c# .net namespaces

我有2个程序集Combreslog4net

两个程序集都包含相同的log4net.Appender命名空间(包含内部代码) - 我需要继承log4net.Appender.AdoNetAppender

我如何做到这一点。

4 个答案:

答案 0 :(得分:7)

您可以为其中一个命名空间指定别名,如下所示:

using MyNameSpace = log4net.Appender;

然后继承MyNameSpace.AdoNetAppender

答案 1 :(得分:6)

完全符合该类型。例如,如果您尝试从此类继承:

class MyAppender : log4net.Appender.AdoNetAppender

如果您正在尝试使用/创建此类的实例:

var appender = log4net.Appender.AdoNetAppender;

如果Combreslog4netAdoNetAppender命名空间中都包含log4net.Appender类型,那么您就会遇到麻烦(有人犯了错误 - 名称空间旨在避免这些冲突)。

如果确实发生了这种情况,那么您可以使用程序集引用“别名”属性来解决冲突,如What use is the Aliases property of assembly references中所述。

答案 2 :(得分:2)

查看extern alias的文档。它允许您显式引用代码中的类,即使它们位于相同的命名空间中并具有相同的名称。

例如,您可以像这样引用log4net类:

extern alias l4n;

//... further down

l4n::log4net.Appender.AdoNetAppender l4nAppender = null;

还必须将“l4n”别名添加到Visual Studio中DLL引用的属性页中。

答案 3 :(得分:0)

我很确定Combres本身不使用log4net.Appender命名空间而是使用Combres.Loggers命名空间。

但是Combres(2.2.1)包含对log4net的引用。如果您的应用程序包含对log4net的引用(甚至可能在Combres引用的log4net程序集之外的其他位置),这可能会导致您所描述的错误。

引用多个log4net程序集,当然这些都包含log4net.Appender