如何解决c#中重复的命名空间
本文关键字:命名空间 何解决 解决 | 更新日期: 2023-09-27 18:07:36
我有两个组件Combres
和log4net
两个程序集包含相同的log4net.Appender
命名空间(包括内部代码)-我需要继承log4net.Appender.AdoNetAppender
。
我该怎么做呢
您可以为其中一个名称空间指定别名,如下所示:
using MyNameSpace = log4net.Appender;
然后继承MyNameSpace。AdoNetAppender
完全限定类型。例如,如果您试图从这个类继承:
class MyAppender : log4net.Appender.AdoNetAppender
如果你试图使用/创建该类的实例:
var appender = log4net.Appender.AdoNetAppender;
如果Combres
和log4net
在log4net.Appender
命名空间中都包含AdoNetAppender
类型,那么你就有更多的麻烦了(有人犯了一个错误——命名空间的设计是为了避免这类冲突)。
如果发生这种情况,则可以使用程序集引用的"别名"属性来解决冲突,如程序集引用的别名属性的用途
查看外部别名的文档。它允许您显式地引用代码中的类,即使它们位于相同的命名空间并且具有相同的名称。
例如,您可以这样引用log4net类:extern alias l4n;
//... further down
l4n::log4net.Appender.AdoNetAppender l4nAppender = null;
别名"l4n"也必须添加到Visual Studio中DLL引用的属性页。
我很确定Combres本身不使用log4net.Appender
命名空间,而是Combres.Loggers
命名空间。
但是Combres
(2.2.1)包含了对log4net
的引用。如果您的应用程序也包含对log4net
的引用(甚至可能在Combres引用的log4net程序集之外的另一个位置),这可能会导致您描述的错误。
(多个log4net程序集被引用,当然这些都包含log4net.Appender
)