Tengo un proyecto auxiliar que utilizo en todas las aplicaciones que creo. Contiene algunos métodos de extensión y un montón de clases auxiliares genéricas, controles, etc. Actualizo / extiendo el proyecto auxiliar de vez en cuando. Por lo general, son proyectos pequeños y no relacionados, y yo soy la única persona que trabaja en todos ellos.
Intenté dos enfoques para usarlo
- Agregar archivos .cs directamente (Agregar como enlace) a cada proyecto donde los uso
- compilarlo como .dll y agregarlo como referencia
Veo algunos beneficios y desventajas de estos enfoques.
El primero:
- es más simple, porque las clases auxiliares se compilan en el archivo exe, por lo tanto, a menudo puedo proporcionar fácilmente un solo archivo .exe que funcionará bien. Debido a que agrego como enlace, puedo estar bastante seguro de que cada vez que compile cualquier proyecto que use el asistente, los archivos del asistente serán la última versión.
- es aún más simple, porque puedo separar los archivos, de modo que mis métodos de extensión que funcionan bien en .NET 4.0 se pueden referenciar por separado de los que requieren .NET 4.5, lo que significa que la aplicación en su conjunto puede ejecutarse en .NET 4.0
- Permite depurar a través del código, con todos los beneficios de puntos de interrupción, etc., etc.
- no parece ser la "mejor práctica"
El segundo:
- parece ser el enfoque correcto, pero:
- requiere que entregue un archivo .dll separado, que por alguna razón es mucho más difícil para los usuarios (tienden a compartir mis programas sin el .dll, que luego se bloquea al inicio)
- ya que se compila en un solo .dll, requerirá la versión más alta de .NET; muchos de mis usuarios no tienen .NET 4.5 y solo algunos elementos de mi clase auxiliar lo requieren, lo que significa que puedo obligar a algunas personas para actualizar sus sistemas sin motivo
- También necesito asegurarme de que cada vez que actualizo alguno de mis programas, también entrego el archivo .dll, aunque no sé si se ha cambiado desde la última versión, o no (podría haberlo sido, pero podría bien podría ser la misma versión). No puedo ver una manera simple de determinar eso, sin hacer un seguimiento de la versión del ensamblaje, que es un trabajo adicional. Por ahora, cuando actualizo mis programas, solo entrego exe actualizado, y me gusta mantenerlo pequeño y de bajo perfil.
Entonces, ¿cuál es el beneficio real de usar el archivo .dll aquí? Tenga en cuenta que soy la única persona que edita el código de todas las aplicaciones y los archivos auxiliares.
Además, para aclarar: las aplicaciones suelen ser muy pequeñas, mientras que el código contenido en las clases auxiliares es completamente genérico para todas ellas (algunas simples comparaciones de cadenas, rutas u operaciones XML, etc.)
En realidad, alguien me hizo darme cuenta ahora que hay una tercera opción. Como tengo el código auxiliar en un proyecto separado, puedo agregar este proyecto a las soluciones de cada una de mis aplicaciones separadas, que funciona como 'Agregar como enlace' para archivos individuales, excepto que solo agrego un solo proyecto ... Pero como notó Doc Brown, esto esencialmente significa que .dll deberá agregarse al proyecto de todos modos ...
Otra cosa que está a favor de no usar los archivos dll es la capacidad de depurar activamente a través de la clase auxiliar ...