2011-06-29 10 views
5

Mam projekt biblioteki klas vb.net 3.5, który musi odwoływać się do dwóch złożeń, które mają tę samą przestrzeń nazw. Mamy dwie trzecie dll, w których jedna jest wersja 5.1, a druga wersja 6.1. Mają tę samą nazwę pliku dll i używają tej samej nazwy przestrzeni nazw i funkcji/klasy. Projekt musi korzystać z jednego lub drugiego w zależności od konkretnej sytuacji.Referencyjne biblioteki dll 2 używające tej samej przestrzeni nazw w projekcie vb.net 3.5?

Sprawdziłem na proces C#, który używa funkcji "extern alias", aby pobrać różne zespoły.

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

What use is the Aliases property of assembly references in Visual Studio 8

Wydaje się, że ta funkcja nie jest w pełni dostępny dla VB.NET.

miejsca Próbowałem

Mam przemianowany 2nd dll i dodaje odniesienie zarówno do mojego projektu. W tym momencie dostaję ton: 'blah' is ambiguous in the namespace.

Muszę więc wymienić różne wersje. W VB.NET można zrobić aliasy na rachunku jak importu:

Imports version5 = Somedll.Something 

Problemem jest to, że nie można skonfigurować alias odniesienia montażu dla różnych wersji DLL. Najwyraźniej w vb.net nie można ustawić ich w oknie właściwości referencyjnych. Tak próbowałem, ustawiając je w moim pliku projektu tak:

<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> 

bym wtedy spodziewać się to do pracy:

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

Ale „SomeDLL5/6” nie pojawi się w intellisense. Więc jak mogę odwołać się do obu bibliotek dll w tym samym projekcie?

+0

To możliwe, że to tylko błąd w IntelliSense. To nie jest scenariusz, który jest mocno przetestowany AFAIK. Czy próbowałeś skompilować i zdobyć błędy? – JaredPar

+0

Otrzymuję zielone zawijanie: Przestrzeń nazw lub typ określony w imporcie nie zawiera żadnego elementu publicznego lub nie można go znaleźć. Upewnij się, że przestrzeń nazw lub typ jest zdefiniowany i zawiera co najmniej jeden element publiczny. Upewnij się, że nazwa importowanego elementu nie zawiera żadnych aliasów. –

Odpowiedz

5

Jestem VB niespełniającego prowadzenie. Obawiam się, że nie ma na to sposobu VB (brak refleksji, jak powiedział DaMartyr). Wiem, że to jest opór. Wpisam to do porządku obrad naszego następnego spotkania VB Language Design Meeting.

+0

Będziemy to do bani. Dzięki za ostateczną odpowiedź! –

+0

@PaulLemke: Może znalazłeś jakieś inne obejście? Ogólnie: czy te informacje są nadal aktualne lub czy istnieje sposób, aby to osiągnąć? Każda pomoc/aktualizacja na ten temat jest bardzo doceniana! –

+0

O ile mi wiadomo, nic się z tym nie zmieniło. Przepraszam. –

0

Czy to pomaga? "W rzadkich przypadkach, gdy odwołujesz się do 2 złożeń, które mają takie same nazwy typów i te same przestrzenie nazw (takie jak 2 różne wersje tego samego dll) - możesz rozróżnić, który zestaw użyć dla danego typu, używając aliasu. dla wszystkich odniesień jest globalna, ale możesz podać swój własny alias dla dowolnego zestawu, kiedy się do niego odwołujesz (przy użyciu przełącznika kompilatora - lub po prostu użyj pola właściwości w Visual Studio) - i mieć zewnętrzną klauzulę aliasu na górze pliku kodu gdzie można go używać - by uzyskać dostęp do typów z różnych zespołów z :: MyNamespace.Type”

Źródło: two different DLL with same namespace

+0

I to jest problem ... W VB.net kiedy próbuję ustawić alias na referencji, nawet go nie pokazuje w intellisense. C# Wygląda na to, że ten alias referencyjny działa. –

Powiązane problemy