2011-05-26 18 views
10

De alguna manera he tenido suerte y nunca tuvo que hacer frente a este problema, a pesar de que creo que es uno común:utilizan versiones diferentes del DLL hace referencia

Tengo un proyecto web, vamos a llamarlo SomeProject. SomeProject tiene una referencia a una biblioteca de terceros, llamémoslo SomeThirdParty, versión 1.0. SomeProject también tiene una referencia a una biblioteca de clase local, llamémoslo SomeLibrary. SomeLibrary también tiene una referencia a SomeThirdParty, pero una versión diferente (digamos 2.0).

La versión 1.0 y 2.0 de SomeThirdParty comparten la mayoría de las mismas firmas, pero son implementaciones diferentes. Necesito SomeProject para usar la implementación 1.0 y SomeLibrary para usar la implementación 2.0 si es posible.

Compilo SomeProject usando su referencia a log4net. La DLL que termina en el directorio bin es la que hace referencia a SomeProject. En tiempo de ejecución, cuando el código de SomeLibrary carreras, intenta ejecutar el código de la versión 2.0 de SomeThirdParty, y por supuesto falla, lanzando una FileLoadException: Could not load file or assembly ' SomeThirdParty , Version=2.0.0.0, Culture=[etc.]' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.

Obviamente, podría actualizar SomeProject a la nueva DLL o degradar SomeLibrary a la mayor DLL, pero no sería ideal por muchas razones.

creo que la respuesta correcta implica la instalación de SomeThirdParty en la GAC, pero no estoy seguro exactamente cómo me gustaría ir haciendo esto, y cómo afectaría a otros desarrolladores y servidores.

Se aprecian todas las sugerencias que pueda tener.

Gracias por la ayuda.

Respuesta

6

Poner ambas versiones de SomeThirdParty en GAC debe hacer lo que quiera. Use la utilidad gacutil o Inicio-> Ejecutar-> ensamblaje y luego arrastre-y-suelte.

+2

Eso es lo que pensé.Realmente no quiero ir por esta ruta, ya que significaría que las asambleas se habrían instalado en el GAC en todas las máquinas de nuestros desarrolladores, y en todos los servidores, y en cualquier desarrollador entrante. Pero lo tendré en cuenta si no podemos encontrar una alternativa. Gracias. –

3

Desde mi respuesta anterior: https://stackoverflow.com/a/19576769/2367343

me encontré con esto ayer para desarrollador web utilizando Visual Studio Oracle.DataAccess.dll.

Mi solución,

haga clic derecho en su proyecto (* .csproj) y editarlo.

Justo debajo:

<PropertyGroup> 

Lugar

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 

luego reconstruir su solución. Debe separar las dos versiones dlls en dos directorios diferentes en su proyecto al incluirlos (obligatorio).

lo hice

ora11 >> Oracle.DataAccess.dll (Version 11) 

ora9 >> Oracle.DataAccess.dll (Version 9) 

Hacer esto permite a su IDE para utilizar ambas versiones de DLL.

Cuestiones relacionadas