Как решить дублирующиеся пространства имен в C # - PullRequest
1 голос
/ 06 сентября 2011

У меня есть 2 сборки Combres и log4net

Обе сборки содержат одинаковое пространство имен log4net.Appender (включая внутренний код) - мне нужно наследовать log4net.Appender.AdoNetAppender.

Какмне сделать это.

Ответы [ 4 ]

7 голосов
/ 06 сентября 2011

Возможно, вы можете указать псевдоним для одного из пространств имен, например:

using MyNameSpace = log4net.Appender;

Затем наследуйте MyNameSpace.AdoNetAppender

6 голосов
/ 06 сентября 2011

Полностью определите тип.Например, если вы пытаетесь наследовать от этого класса:

class MyAppender : log4net.Appender.AdoNetAppender

Если вы пытаетесь использовать / создать экземпляр этого класса:

var appender = log4net.Appender.AdoNetAppender;

Если Combres и *Оба типа 1008 * содержат тип AdoNetAppender в пространстве имен log4net.Appender, тогда у вас больше проблем (и кто-то допустил ошибку - пространства имен разработаны, чтобы избежать подобных конфликтов).

Если это произойдет,вы можете использовать свойство ссылки на сборку "Aliases", чтобы разрешить конфликт, как описано в Для чего используется свойство Aliases ссылок на сборку .

2 голосов
/ 06 сентября 2011

Ознакомьтесь с документацией для extern псевдонима .Это позволяет вам явно ссылаться на классы в вашем коде, даже если они находятся в одном и том же пространстве имен и имеют одинаковые имена.

Например, вы можете ссылаться на классы log4net следующим образом:

extern alias l4n;

//... further down

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

Псевдоним "l4n" также необходимо добавить на страницу свойств для ссылки на DLL в Visual Studio.

0 голосов
/ 06 сентября 2011

Я совершенно уверен, что Combres сам не использует пространство имен log4net.Appender, но Combres.Loggers пространство имен.

Но Combres (2.2.1) содержит ссылку на log4net. Если ваше приложение также содержит ссылку на log4net (возможно, даже в другом месте, чем сборка log4net, на которую ссылается Combres), это может привести к описанной вами ошибке.

( Ссылка на несколько сборок log4net и, конечно, все они содержат log4net.Appender)

...