5

Tengo una solución con más de 100 proyectos. Lleva mucho tiempo construir y, a veces, los bloqueos de Visual Studio durante la compilación. ¿Cómo puedo lidiar con este problema y minimizar el dolor? ¿Hemos ido horriblemente mal en algún lado?Solución con más de 100 proyectos toma más de cinco minutos para construir

Algunos antecedentes sobre el problema:

Estamos utilizando CAB con WPF, y cada módulo tiene un conjunto de interfaz de usuario y un conjunto de "servidor", que es en realidad sólo una capa de la base de datos. Solo hay un equipo, con aproximadamente 5 desarrolladores.

No sé cuántas clases o cuántas líneas de código.

+1

¿Por qué no utiliza sus alternativas de línea de comando? – vpram86

+2

¿Cuántas clases por proyecto? ¿Cuántas líneas de código total? ¿Cuántos desarrolladores/equipos? ¿Con qué frecuencia cambia cada uno de los proyectos (algunos pueden preconstruirse)? – ChrisW

+7

¿Qué hay de malo con tomar 5 minutos para reconstruir 100 proyectos? El edificio no debería tomar tanto tiempo como Rebuilding. –

Respuesta

9

Su pregunta es un poco corta en detalles, pero me imagino que el bloqueo es solo un problema de recursos de estación de trabajo más que nada. 100 proyectos no es un problema en sí mismo siempre y cuando haya buenas razones para tener tantos, pero para cuando llegue a más de 10 proyectos, espero que tenga algún tipo de estructura de gestión para ellos.

¿Realmente necesita construir los 100 proyectos, todo el tiempo? Puede desconectar proyectos individuales para la construcción utilizando el administrador de configuración, y puede crear archivos de solución con un subconjunto del número total de proyectos.

Por ejemplo, tenemos 36 proyectos para una de las aplicaciones empresariales con las que trabajo. Junto con eso, tenemos múltiples archivos de soluciones y configuraciones diseñadas para permitir a nuestros desarrolladores cargar solamente los proyectos y la configuración que necesitan para trabajar con los subcomponentes de la aplicación. En otras palabras, solo están cargando algún subconjunto de los 36 proyectos. Nuestro servidor de compilación se encarga de armar todo.

Sugiero hacer algunos análisis en su aplicación y averiguar qué puede consolidar y qué puede dividir en otros archivos de solución.

+0

Y las evaluaciones de dependencia toman más tiempo cuanto más proyectos tenga en una solución, este es un lugar donde puede ser útil tener múltiples soluciones o configuraciones. Baje el registro de mensajes para informar solo errores; la consola escribe algo lento. – DaveE

+0

¿Puede profundizar en las evaluaciones de dependencia? – MedicineMan

+0

¿Qué sucede si alguien cambia la firma de un componente compartido? No causará un error de compilación en su solución porque no tiene todos los proyectos cargados en ese momento. – MedicineMan

1

Puede hacer clic derecho en un proyecto individual en el Explorador de soluciones y seleccionar la opción para construir solo ese proyecto. Si hay proyectos necesarios en el orden de compilación, también los compilará, pero esto le permite construir solo los elementos necesarios.

2

¿Todos necesitan construir al mismo tiempo? De lo contrario, puede ingresar al Configuration Manager y seleccionar solo los que necesita construir en este momento.

Aunque me parece que 100 proyectos en una solución son bastantes. ¿Es esto realmente necesario? ¿Se puede dividir en pequeñas soluciones relacionadas, o existen realmente muchos proyectos que son interdependientes entre sí?

+0

El problema es que los desarrolladores pueden cambiar las firmas cuando no deberían. Los proyectos no cargados en su solución personalizada no podrán compilarse. Supongo que esto podría manejarse con integración continua, pero no hemos llegado tan lejos todavía. – MedicineMan

3

Su pregunta parece tener más que ver con el diseño de su solución y menos con la capacidad de VS para manejar 100 proyectos. Realmente desea saber si el hecho de que su solución tarde mucho tiempo es un código que huele a "mierda sagrada, hemos diseñado esto mal".

Si usted tiene una relación 1: 1 entre los conjuntos "interfaz de usuario" y "Servidor" asambleas, que son lógicamente la misma y podría combinarse.

Está bien para los conjuntos de módulos CAB/CAG tener todas sus dependencias en un conjunto en mi opinión. Si tiene la intención de compartir el código de acceso a datos en varios módulos, entonces tendría sentido dividirlo en un ensamblaje por separado.

Si decide este enfoque no es apropiado, lo que normalmente hacemos es tener varias soluciones más pequeños que nos permiten poner a prueba un par de módulos relacionados entre sí a nivel local durante el desarrollo, pero tienen una solución grande que nuestra construcción los servidores construyen afuera. De esta forma, los tiempos de compilación largos los experimenta una máquina de desarrollo dedicada, en lugar de nuestras cajas de desarrollo local (este es un buen enfoque incluso para los proyectos más pequeños).

+0

Creo que tienes razón, creo que estoy haciendo una pregunta sobre el código malicioso. Ni siquiera me di cuenta de esto hasta ahora. – MedicineMan

+0

Puedo decirte otra cosa. Si sus Módulos no son autónomos (es decir, si no puede eliminarlos y aún así cargar su caparazón y todos los demás Módulos), entonces no están diseñados correctamente Módulos. Los módulos deben ser lo más independientes posible. Hay momentos en los que ModuleDependencies es apropiado, pero deben ser pocos y poco frecuentes. –

0

Configuraciones de solución predeterminadas Debug and Release siempre comprueba todos los proyectos y crea los que no están actualizados. Puede crear su propia configuración de solución donde deshabilita la opción de compilación para proyectos que sabe que no necesitan revisión.

Cuestiones relacionadas