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

本文关键字:命名空间 何解决 解决 | 更新日期: 2023-09-27 18:07:36

我有两个组件Combreslog4net

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

我该怎么做呢

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

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

using MyNameSpace = log4net.Appender;

然后继承MyNameSpace。AdoNetAppender

完全限定类型。例如,如果您试图从这个类继承:

class MyAppender : log4net.Appender.AdoNetAppender

如果你试图使用/创建该类的实例:

var appender = log4net.Appender.AdoNetAppender;

如果Combreslog4netlog4net.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)