Pregunta

¿Qué se considera una mejor práctica cuando se trata de ensamblajes y lanzamientos?

Me gustaría poder hacer referencia a varias versiones de la misma biblioteca; la solución contiene varios proyectos que dependen de diferentes versiones de una biblioteca commonutils.dll que construimos nosotros mismos.

Como todas las dependencias se copian en bin/debug o bin/release, solo puede existir una única copia de commonutils.dll allí a pesar de que cada uno de los archivos DLL tiene diferentes números de versión de ensamblaje.

¿Debo incluir números de versión en el nombre del ensamblado para poder hacer referencia a múltiples versiones de una biblioteca o hay otra manera?

¿Fue útil?

Solución

Esto es lo que he estado viviendo...

Depende de para qué planea utilizar los archivos DLL.Los clasifico en dos grupos principales:

  1. Asambleas sin salida.Estos son archivos EXE y DLL a los que realmente no planeas hacer referencia desde ningún lugar.Simplemente nómbralos débilmente y asegúrate de tener los números de versión que publicas etiquetados en el control de fuente, para que puedas revertirlos cuando quieras.

  2. Asambleas referenciadas.Asigne un nombre seguro para que otros ensamblados puedan hacer referencia a varias versiones.Utilice el nombre completo para hacer referencia a ellos (Assembly.Load).Guarde una copia de la versión más reciente y mejor en un lugar donde otro código pueda hacer referencia a ella.

A continuación, tiene la opción de copiar localmente o no sus referencias.Básicamente, la compensación se reduce a: ¿quieres recibir parches/actualizaciones de tus referencias?Puede haber un valor positivo al obtener nuevas funciones, pero, por otro lado, podría haber cambios importantes.Creo que la decisión en este caso debería tomarse caso por caso.

Mientras desarrolla en Visual Studio, de forma predeterminada, utilizará la última versión para compilar con, pero una vez compilado, el ensamblado de referencia requerirá la versión específica con la que fue compilado.

Su última decisión es copiar local o no.Básicamente, si ya tiene un mecanismo implementado para implementar el ensamblado al que se hace referencia, configúrelo en falso.

Si está planeando un gran sistema de gestión de lanzamientos, probablemente tendrá que pensar y cuidar mucho más esto.Para mí (una tienda pequeña, dos personas), esto funciona bien.Sabemos lo que está pasando y no nos sentimos restringidos. teniendo hacer las cosas de una manera que no tiene sentido.

Una vez que llegue al tiempo de ejecución, ensambla. Carga lo que quieras en el dominio de aplicación.Luego, puede usar Assembly.GetType para alcanzar el tipo que desea.Si tiene un tipo que está presente en varios ensamblados cargados (como en varias versiones del mismo proyecto), es posible que obtenga un Excepción de coincidencia ambigua excepción.Para resolver eso, necesitará obtener el tipo de una instancia de una variable de ensamblaje, no del método estático Assembly.GetType.

Otros consejos

Los ensamblados pueden coexistir en el GAC (Global Assembly Cache) incluso si tienen el mismo nombre dado que la versión es diferente.Así es como funcionan los ensamblados enviados de .NET Framework.Un requisito que se debe cumplir para que una asamblea pueda registrarse en el GAC es estar firmado.

Agregar números de versión al nombre de la Asamblea simplemente anula todo el propósito del ecosistema de la asamblea y es engorroso en mi humilde opinión.Para saber qué versión de un ensamblaje determinado debo abrir la ventana Propiedades y verificar la versión.

Dar diferentes nombres a diferentes versiones de ensamblaje es la forma más fácil y seguramente funciona.

Si su ensamblado (commonutils.dll) tiene un nombre seguro (es decir,firmado), puede pensar en instalarlo en el GAC (Caché de ensamblaje global; puede instalar diferentes versiones del mismo ensamblaje en paralelo en el GAC), por lo tanto, la aplicación que realiza la llamada obtiene automáticamente la versión adecuada desde allí porque .NET Los tipos incluyen información de la versión del ensamblado.

En su proyecto VS hace referencia a la versión correcta de la biblioteca, pero no la implementa en la carpeta de la aplicación;en su lugar, lo instala en el GAC (durante la configuración de la aplicación).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top