Ссылочные 2 dll, использующие то же пространство имен в проекте vb.net 3.5? - PullRequest
6 голосов
/ 29 июня 2011

У меня есть проект библиотеки классов vb.net 3.5, который должен ссылаться на две сборки, которые имеют одинаковое пространство имен.У нас есть две сторонние библиотеки, в которых одна версия 5.1, а другая версия 6.1.У них одинаковое имя файла dll, и они используют одно и то же пространство имен и имена функций / классов.Проект должен использовать один или другой в зависимости от конкретной ситуации.

Я исследовал процесс ac #, который использует функцию "внешнего псевдонима" для извлечения различных сборок.

http://blogs.msdn.com/b/ansonh/archive/2006/09/27/774692.aspx

Для чего используется свойство Aliases ссылок на сборки в Visual Studio 8

Похоже, эта функция не полностью доступнадля vb.net.

Вещи, которые я пробовал

Я переименовал 2-й DLL и добавил обе ссылки на свой проект.На данный момент я получаю тонны: 'blah' is ambiguous in the namespace.

Так что мне нужно псевдоним различных версий.В vb.net вы можете использовать псевдонимы для оператора импорта, например:

Imports version5 = Somedll.Something

Проблема в том, что я не могу установить псевдоним ссылки на сборку для разных версий библиотеки DLL.Очевидно, в vb.net вы не можете установить их в окне свойств ссылки.Поэтому я попытался установить их в своем файле проекта следующим образом:

<Reference Include="somedll.5.Navigation">
  <HintPath>..\..\Utility\ThirdPartyDLLS\somedll.5.dll</HintPath>
      <Aliases>SomeDLL5</Aliases>
      <Private>False</Private>
</Reference>
<Reference Include="somedll.6.Navigation, Version=6.1.0.0, Culture=neutral, PublicKeyToken=6d02be8724ca751c, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\Utility\ThirdPartyDLLS\somedll.6.dll</HintPath>
      <Aliases>SomeDLL6</Aliases>
      <Private>False</Private>
</Reference>

Я бы тогда ожидал, что это сработает:

Imports version5 = SomeDLL5.Something
Imports version6 = SomeDLL6.Something

Но «SomeDLL5 / 6» не отображаетсяв интеллигентности.Так как я могу ссылаться на оба DLL в одном проекте?

Ответы [ 3 ]

7 голосов
/ 01 июля 2011

Я ведущий спецификаций VB. Я боюсь, что у VB нет способа сделать это (если не считать размышлений, как сказал DaMartyr). Я знаю, что это сопротивление. Я включу это в повестку дня нашей следующей VB Language Design Meeting.

0 голосов
/ 29 июня 2011

Это помогает?«В редком случае, когда вы ссылаетесь на 2 сборки, которые имеют одинаковые имена типов и одинаковые пространства имен (например, 2 разные версии одной и той же библиотеки DLL) - вы можете различить, какую сборку использовать для данного типа, используя псевдоним. Псевдоним по умолчаниюдля всех ссылок является глобальным, но вы можете указать свой собственный псевдоним для любой сборки, когда вы ссылаетесь на него (используя переключатель компилятора - или просто используете поле свойств в Visual Studio) - и имеете предложение extern alias в верхней части вашего файла кодагде вы его используете - вы получите доступ к типам из разных сборок с помощью :: MyNamespace.Type "

Источник: две разные DLL с одинаковым пространством имен

0 голосов
/ 29 июня 2011

Попробуйте Пространство имен System.Reflection , если вы можете поразить производительность.

...