.NET - несколько библиотек с одинаковым пространством имен - ссылки - PullRequest
20 голосов
/ 21 января 2011

Сегодня я столкнулся с любопытным испытанием ...

В этом задании участвуют две библиотеки .NET, на которые мне нужно ссылаться из моего приложения. Оба из которых я не могу контролировать, и у меня одно и то же пространство имен.

Итак ...

У меня есть foo.dll, который содержит класс Widget, расположенный в пространстве имен Blue.Red.Orange.

У меня есть bar.dll, который также содержит класс Widget, который также находится в пространстве имен Blue.Red.Orange.

Наконец, у меня есть приложение, которое должно ссылаться на foo.dll и bar.dll. Это необходимо, так как в моем приложении мне нужно использовать класс Widget из foo, а также класс Widget из bar

Итак, вопрос в том, как мне управлять этими ссылками, чтобы быть уверенным, что я использую правильный Widget класс?

Как уже упоминалось, я не имею никакого контроля над библиотеками foo или bar, они такие, какие есть, и не могут быть изменены. Однако у меня есть полный контроль над моей заявкой.

Ответы [ 5 ]

42 голосов
/ 21 января 2011

Вам нужно использовать внешний псевдоним - представленный в C # 2.

У Энсона Хортона есть прохождение в его блоге , которое выможет оказаться полезным.

8 голосов
/ 21 января 2011

Я думаю, что вы должны использовать extern alias

См. http://msdn.microsoft.com/en-us/library/ms173212.aspx

Вот пошаговое руководство. http://blogs.msdn.com/b/ansonh/archive/2006/09/27/774692.aspx

1 голос
/ 21 января 2011

Для разрешения конфликтов вы можете использовать свойство Aliases Выберите библиотеку и откройте окно свойств. Это уже обсуждалось в этом ТАК сообщении

0 голосов
/ 21 января 2011

Ничего себе, это сложно.Думаю, я бы создал две библиотеки-оболочки:

  1. MyBarWrapper.dll (который имеет ссылку на bar.dll)
  2. MyFooWrapper.dll (который имеет ссылку на foo.dll)

и поддерживают там разные пространства имен.

0 голосов
/ 21 января 2011

Я был бы удивлен, если бы вы могли сделать это, не используя отражения.

Может быть проще создать свои собственные библиотеки FooWrapper и BarWrapper, которые ссылаются на foo и bar и снова предоставляют их содержимое в разных пространствах имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...