2011-06-29 16 views
5

Tengo un proyecto de biblioteca de clase vb.net 3.5 que necesita hacer referencia a dos ensamblajes que tienen el mismo espacio de nombres. Tenemos dos dll de terceros en los que uno es la versión 5.1 y el otro es la versión 6.1. Tienen el mismo nombre de archivo dll y utilizan el mismo espacio de nombres y funciones/nombres de clase. El proyecto necesita usar uno u otro dependiendo de una situación específica.Referencia 2 dlls que utilizan el mismo espacio de nombres en el proyecto vb.net 3.5?

He investigado un proceso de C# que utiliza la característica "alternar externo" para extraer los diferentes ensamblajes.

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

Parece que esta función no está totalmente disponible para vb.net.

cosas que he intentado

He cambiado el nombre de la segunda DLL y añadí ambas referencias a mi proyecto. En este punto obtengo toneladas de: 'blah' is ambiguous in the namespace.

Así que necesito alias las diferentes versiones. En vb.net que puede hacer alias en una declaración de importación como:

Imports version5 = Somedll.Something 

El problema es que no puede configurar un alias referencia de ensamblado de las diferentes versiones de la DLL. Aparentemente en vb.net no puedes configurarlos en la ventana de propiedades de referencia. Así que traté de colocarlos en mi archivo de proyecto como este:

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

Entonces yo esperaría que esto funcione:

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

Pero el "SomeDLL5/6" no aparece en IntelliSense. Entonces, ¿cómo puedo hacer referencia a ambos dll en el mismo proyecto?

+0

Es posible que esto sea solo un error en Intellisense. No es un escenario que está fuertemente probado AFAIK. ¿Has intentado compilar y has recibido errores? – JaredPar

+0

Obtengo el garabato verde: el espacio de nombre o tipo especificado en Imports no contiene ningún miembro público o no se puede encontrar. Asegúrese de que el espacio de nombre o el tipo esté definido y contenga al menos un miembro público. Asegúrese de que el nombre del elemento importado no use ningún alias. –

Respuesta

5

soy el plomo especificación VB. Me temo que no hay forma de VB de hacer esto (menos que reflejo, como dijo DaMartyr). Sé que esto es un lastre. Lo pondré en la agenda de nuestra próxima reunión de diseño de idiomas de VB.

+0

Eso es una mierda. Gracias por la respuesta definitiva! –

+0

@PaulLemke: ¿Encontraste alguna otra solución, tal vez? En general: ¿esta información todavía está actualizada o hay alguna manera de lograr esto ahora? ¡Cualquier ayuda/actualización sobre este tema es muy apreciada! –

+0

Hasta donde sé, nada ha cambiado con esto. Lo siento. –

0

¿Esto es útil? "En el raro caso de que haga referencia a 2 ensamblados que tienen los mismos nombres de tipo y los mismos espacios de nombres (como 2 versiones diferentes del mismo dll), puede distinguir qué ensamblaje usar para un tipo determinado usando un alias. para todas las referencias es global, pero puede especificar su propio alias para cualquier ensamblado cuando lo referencia (utilizando un compilador, o simplemente use el cuadro de propiedades en Visual Studio) y tenga una cláusula de alternancia externa en la parte superior del archivo de código donde vaya a utilizarlo - usted podrá acceder a los tipos de diferentes montajes con :: MyNamespace.Type"

Fuente: two different DLL with same namespace

+0

Y ese es el problema ... En VB.net cuando trato de configurar el alias en la referencia, ni siquiera aparece en intellisense. C# Parece tener estos alias de referencia funcionando. –

Cuestiones relacionadas