我有2个程序集Combres
和log4net
两个程序集都包含相同的log4net.Appender
命名空间(包含内部代码) - 我需要继承log4net.Appender.AdoNetAppender
。
我如何做到这一点。
答案 0 :(得分:7)
您可以为其中一个命名空间指定别名,如下所示:
using MyNameSpace = log4net.Appender;
然后继承MyNameSpace.AdoNetAppender
答案 1 :(得分:6)
完全符合该类型。例如,如果您尝试从此类继承:
class MyAppender : log4net.Appender.AdoNetAppender
如果您正在尝试使用/创建此类的实例:
var appender = log4net.Appender.AdoNetAppender;
如果Combres
和log4net
在AdoNetAppender
命名空间中都包含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
)