2012-03-30 61 views
5

En mi proyecto, tengo un problema con su jerarquía de dependencias. Uso una biblioteca (WriteableBitmapExtensions) en mi código, y tengo otra biblioteca de terceros que también usa WriteableBitmapExtensions. Solo la otra biblioteca está fuertemente ligada a una versión específica y más antigua, y mi código necesita la funcionalidad en su última versión.Resolución/uso de versiones de ensamblaje múltiple de dependencias de terceros

Aquí es una representación de las dependencias: dependency tree

hay preguntas similares & soluciones, sino que resolverlo con estructura de encuadernación en tiempo de ejecución a través de un archivo de configuración, pero no creo que esto sea compatible para una aplicación de Silverlight.

Referencing 2 different versions of log4net in the same solution

Using different versions of the same assembly in the same folder

3rd party libraries refer to different versions of log4net.dll

How to deal with multiple versions of dependencies?

Entonces, ¿hay una manera de resolver estas versiones diferentes de las dependencias de ensamblado en un contexto de Silverlight? Si no lo hay, creo que mis opciones son:

1) Lo más probable es que pueda convencer al proveedor de la biblioteca de terceros de que actualice para usar la última versión de WriteableBitmapExtensions, pero preferiría no depender de ellos manteniéndolo actualizado. Sobre todo porque el proyecto WriteableBitmapExtensions aún se está actualizando y, a menudo, aprovechamos sus nuevas funciones.

2) Como WriteableBitmapExtensions es de código abierto, supongo que puedo recompilar su fuente como un nuevo ensamblado "MyWriteableBitmapExtensions" y usar eso en mi código fuente. Pero volveré a encontrarme con este problema si dos bibliotecas de terceros hacen referencia a diferentes versiones de WriteableBitmapExtensions.

Sospecho que iré con la opción 2, pero me gustaría saber si hay una forma mejor de hacerlo (como el ensamblado en tiempo de ejecución vinculante en las otras preguntas) antes de confirmar/refactorizar. ¡Gracias!

Respuesta

1

Como ya he dicho en mi comentario, la Opción 1 debería estar disponible porque "v1" es en realidad una versión "pre beta".

Si hay un retraso en el proveedor de terceros que lanza una compilación utilizando una versión no beta, su opción 2 es su siguiente opción. Solo asegúrese de utilizar una identidad completamente nueva para su compilación de MyWriteableBitmapExtensions: use específicamente un AssemblyName diferente, FileName, Strong Name Signature y cualquier GUID utilizado para la identidad, incluso para COM.

Si no necesitaras la nueva funcionalidad o si la v2 fuera compatible con v1, la opción de encuadernación sería la opción preferible - No he confirmado si esto está disponible con Silverlight, pero hubiera se sorprenderá si no fuera, aunque ahora estoy de acuerdo en que el ensamblaje verdadero no está disponible en Silverlight porque todo el espacio de nombres System.Configuration no se encuentra en Silverlight (excepto para dos enumeraciones en System.Configuration.Assemblies).

Sin embargo, otra opción es ajustar el último código fuente para que hace producir algo que es compatible con versiones anteriores a V1, quizá rompiendo las características v2 si tiene que - de tal manera las características V2 puede todavía ser utilizado, solo con una recompilación, ahora con la identidad original (AssemblyName, FileName, Strong Name Signature, etc.).Entonces debería poder usar el ensamblaje uno para ambos escenarios nuevamente.

+0

Solo miré el proyecto WriteableBitmapExtensions después de escribir esta respuesta y ahora me doy cuenta de lo que usted llama __v1__ es en realidad casi una versión _pre-beta_, ya que la última es __v1 beta__. Así que la opción (1) se convierte en una opción más: el proveedor de terceros debería estar contento de volver a lanzar una versión que no sea beta cuando esté disponible. –

+0

Ahora he editado esta respuesta de nuevo, ya que parece que Silverlight _no admite el ensamblado de encuadernación :-( –

+1

Sí, esa fue la versión inicial. Espero que este proveedor en particular actualice; son bastante buenos de esa manera. Tengo preocupaciones sobre otras bibliotecas en general y me preguntaba si había una solución completa/adecuada (como el ensamblaje) especialmente porque toda la opción de "fuente abierta, recompilar" podría no estar siempre disponible, pero parece que no Gracias por la nota para actualizar los GUID de identidad y nombre fuerte, podría haber pasado por alto. –

Cuestiones relacionadas