如何解决 C# 中的重复命名空间
我有 2 个程序集 Combres 和 log4net
两个程序集都包含相同的 log4net.Appender 命名空间(包括内部代码) - 我需要继承 log4net.Appender.AdoNetAppender
。
我该如何实现这个目标。
I have 2 assemblies Combres
and log4net
Both assemblies contain the same log4net.Appender
namespace (internal code included) - I need to inherit log4net.Appender.AdoNetAppender
.
How do I accomplish this.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以为其中一个命名空间指定一个别名,如下所示:
然后继承 MyNameSpace.AdoNetAppender
You can probably specify an alias for one of the namespaces, like this:
Then inherit MyNameSpace.AdoNetAppender
完全限定类型。例如,如果您尝试从此类继承:
如果您尝试使用/创建此类的实例:
如果
Combres
和log4net
都包含类型AdoNetAppender
在log4net.Appender
命名空间中,那么你就会遇到更多麻烦(有人犯了一个错误 - 命名空间旨在避免此类冲突)。如果确实发生这种情况,则您可以使用程序集引用“别名”属性来解决冲突,如 程序集引用的 Aliases 属性有什么用。
Fully qualify the type. For example if you are trying to inherit from this class:
If you are trying to use / create an instance of this class:
If
Combres
andlog4net
both contain a typeAdoNetAppender
in thelog4net.Appender
namespace then you are in more trouble (and someone made a mistake - namespaces are designed to avoid these sorts of conflicts).If this does happen then you can use the assembly reference "Aliases" property to resolve the conflict as described in What use is the Aliases property of assembly references.
查看外部别名的文档。它允许您在代码中显式引用类,即使它们位于相同的命名空间中并且具有相同的名称。
例如,您可以像这样引用 log4net 类:
“l4n”别名还必须添加到 Visual Studio 中 DLL 引用的属性页中。
Take a look at the documentation for extern alias. It allows you to explicitly reference classes in your code even if they are in the same namespace and have the same name.
You might, for example, reference the log4net classes like so:
The "l4n" alias also has to be added to the property page for the DLL reference in Visual Studio.
我非常确定 Combres 本身不使用
log4net.Appender
命名空间,而是使用Combres.Loggers
命名空间。但
Combres
(2.2.1) 包含对log4net
的引用。如果您的应用程序也包含对 log4net 的引用(甚至可能位于 Combres 引用的 log4net 程序集之外的其他位置),则可能会导致您所描述的错误。(引用了多个 log4net-assemblies,当然这些都包含
log4net.Appender
)I'm quite sure that Combres itself does not use the
log4net.Appender
namespace butCombres.Loggers
namespace.But
Combres
(2.2.1) contains a reference tolog4net
. If your application contains a reference tolog4net
as well (possibly even in another location than the log4net assembly that is referenced by Combres), this could result in the error you described.(Multiple log4net-assemblies are referenced and of course these all contain the
log4net.Appender
)