Cómo hacer referencia a ensamblados compartidos que aún están en desarrollo (.NET)

StackOverflow https://stackoverflow.com/questions/1422899

  •  07-07-2019
  •  | 
  •  

Pregunta

Soy responsable de desarrollar y mantener un conjunto de conjuntos de marcos comunes que se utilizan para crear nuestras aplicaciones de productos. Estos conjuntos son relativamente nuevos y están en un estado de cambio a medida que se implementan nuevas características, etc. Como resultado, no es inusual que se reconstruyan y redistribuyan con cierta frecuencia. Esperaría que esto disminuya a medida que las asambleas se estabilicen, pero es lo que es hoy.

En este momento, los ensamblajes se colocan en una carpeta común donde los proyectos de desarrollo pueden hacer referencia a los mismos ensamblajes. Aplicar actualizaciones es tan simple como reemplazar los archivos y los proyectos de desarrollo recogen automáticamente los cambios la próxima vez que se cargan y crean.

El problema que tengo es que podemos tener varias '' capas '' de ensamblajes creados sobre el marco; por ejemplo, tenemos una biblioteca Core compartida por todas las aplicaciones y una biblioteca Server que hace referencia a Core y es compartida por todas las aplicaciones Server. Todas las dependencias también deben reconstruirse cada vez que se actualizan los ensamblajes del marco, lo que hace que esta sea una tarea muy grande. No creo que pueda usar el GAC porque esto requeriría que todos los desarrolladores actualicen sus sistemas cada vez que se lance una nueva versión.

He investigado las Políticas de los editores, pero tengo algunas dudas de que esto resolverá mi problema por varias razones:

  • Por mi parte, no quiero volver a crear el archivo cada vez que reconstruyo mis ensamblajes de framework, ¿hay alguna forma de automatizar este proceso?

  • No me queda claro si requiere que los ensamblajes entren en el GAC. Como dije, no quiero obligar a mis desarrolladores a reinstalar, actualizar, etc., cada vez que lanzamos una nueva versión de los ensamblados.

  • No tengo ningún control sobre la configuración y configuración de la red, por lo que es necesario evitar toda la "confianza" problema colocando los archivos en un recurso compartido de red. Además, muchos de nuestros desarrolladores trabajan a veces conectados y queremos que los archivos estén disponibles cuando se desconectan.

El objetivo sería hacer que la actualización de estos ensamblajes sea transparente para los desarrolladores de aplicaciones que los están consumiendo. Sin duda, instalaremos estos ensamblajes en el GAC en la máquina de destino cuando se instale la aplicación, pero no queremos hacerlo con fines de desarrollo. Tampoco es razonable incluir los proyectos en la Solución de cada aplicación, ya que están desarrollados por diferentes equipos.

No puedo imaginar que estoy solo en estos requisitos y espero que alguien pueda compartir su experiencia y sabiduría para guiarme hacia una solución. Gracias!

¿Fue útil?

Solución 2

NuGet ha resuelto este problema. Al distribuir los ensamblados, marcos, etc. compartidos como paquetes NuGet desde un repositorio privado en nuestra red, podemos publicar fácilmente actualizaciones y aplicarlas al código del cliente según corresponda.

Otros consejos

No necesariamente necesita instalar los ensamblajes en el GAC; nada en su configuración requiere esto.

El problema principal aquí es asegurarse de que una asamblea obligue a reconstruir todas sus dependencias, y que todas estas se coloquen en una ubicación compartida.

La opción más fácil aquí probablemente sería tener un servidor de compilación que reconstruya todo cada vez que se actualice uno de los ensamblados compartidos. Esto también tiene la ventaja de ejecutar potencialmente otros 'scripts' en la compilación, como hacer métricas de código, análisis de código estático, etc., cada vez que se registra una compilación.

Puede hacer que el servidor de compilación copie todo en una ubicación compartida. Si los proyectos hacen referencia desde la ubicación compartida y dicen explícitamente que no se restrinjan a una versión específica, todo debería funcionar bien.

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