2011-12-22 12 views
6

Actualmente tengo un programa que escribí dividido en 3 soluciones separadas.¿Qué tipo de solución de estudio visual es adecuada para mí?

  1. extremo delantero (todo el material relacionado con pantalla)
  2. analizadores (múltiple (39) proyectos que cada uno crear un archivo DLL para analizar datos específicos)
  3. Globals (múltiple (5) proyectos que cada uno crear un DLL que es utilizado por proyectos en la solución de analizadores, y por el front-end).

Requisitos -

  • Tanto el extremo delantero y analizadores requieren los archivos DLL globals de existir en tiempo de compilación, y se utiliza en tiempo de ejecución.
  • Los dlls de Parsers se cargan en tiempo de ejecución utilizando assembly.LoadReference.
  • Desarrollo es: C:\projects\myProg
  • ubicación de despliegue es: C:\myProg

Mi problema es que he estado yendo y viniendo con temas relacionados con las dependencias del proyecto, dónde apuntar a mis dlls globals. ¿Señalo la ubicación desplegada o la ubicación de desarrollo y, de ser así, la versión o la depuración?

Así que comencé a buscar los diferentes tipos de soluciones, y me pregunto si debería configurar una solución dividida o una solución múltiple para mi situación particular.

+4

¿Alguna razón por la que no está utilizando referencias de proyectos? ¿Por qué estás usando 'assembly.LoadReference' para cargar assmblies? ¿Por qué tienes 39 (!) Proyectos para los diferentes analizadores? ¿Por qué 5 para globales? – Oded

+0

un diagrama arq sería un buen lugar para estar, una solución es solo una agrupación lógica de proyectos. – mcabral

+0

Esto se hizo para que la parte delantera fuera tonta sobre lo que estaba analizando. Si tuviera un nuevo mensaje que necesitara analizar, podría escribir un dll arrojándolo en el directorio. Todo lo que tendría que hacer desde la interfaz es asociar un mensaje con la DLL, y estaba listo para empezar. Cada DLL define un análisis diferente para diferentes tipos de datos. – Jason

Respuesta

3

Agregue todos los proyectos a una única solución.

Cambie cualquier referencia entre proyectos en "referencias de proyecto" en lugar de referencias directas a archivos dll. Esto solucionará muchos problemas de dependencia.

Si tiene archivos de "biblioteca" que no se modifican con frecuencia, puede moverlos opcionalmente a una solución aparte. El resultado de esto deberían ser dlls de lanzamiento "precompilados" que luego puede hacer referencia desde una ubicación estándar en su solución principal (la mejor manera de hacerlo es agregar un paso de compilación posterior que copie el resultado a su carpeta de desarrollo "binarios de biblioteca") De esta forma, el proceso de compilación no cambia, simplemente agrega un paso adicional para obtener los archivos donde los necesita y mantiene el control total del proceso de compilación. Esto funciona bien, pero es un problema si necesita cambiar estos dlls preconstruidos a menudo, por lo que lo mejor es utilizarlo solo para partes bastante estáticas de su base de código.

Finalmente, considere fusionar muchos de sus proyectos en un único proyecto/conjunto. El asesino en los tiempos de construcción no es la cantidad de código, es la cantidad de ensamblajes: en mi PC, cada proyecto agrega unos 3 segundos bastante constantes al tiempo de compilación, por lo que al fusionar proyectos pequeños he ahorrado bastante tiempo de compilación.

+0

¿Esto se haría de la manera que dijo @rfmodulator? ¿Cómo separaría visualmente los analizadores frente a los globales frente a frente? – Jason

+0

Supongo que los analizadores no son muy grandes. Entonces, probablemente puedas hacer esto para simplificar las cosas y solo usar referencias de proyectos sin matar tus tiempos de construcción. La sugerencia de fusionarse también es buena. Por ejemplo, ¿pueden algunos analizadores relacionados fusionarse en un solo proyecto? (Por ejemplo, reducir 39 conjuntos de analizador a, digamos, 5.) –

+0

@James: lo más probable es que pueda combinar los globales en un único conjunto. Desafortunadamente, los analizadores no están destinados a ser mezclados. – Jason

0

por qué están distribuidos en proyectos separados, combina los parses y los globales en un solo conjunto. mantenga el conjunto de UI separado y tan simple/pequeño como sea posible.

+0

El objetivo para los analizadores sintácticos era poder escribir rápidamente un nuevo analizador en algún punto del campo, y ponerlo en el directorio correcto, y la interfaz gráfica de usuario lo manejaría. Por el contrario, si le diéramos esto a un proveedor que no admitía (o no queríamos ver los mensajes), extraeríamos todos los dlls de análisis pero los que necesitaban ver. – Jason

+0

hay mejores formas de manejar esto. pero eso está más allá del alcance de esta publicación. –

+0

de alguna manera a la barra lateral? Tengo curiosidad de tus pensamientos sobre esto. – Jason

2

Dado que esos 3 son todos parte del mismo sistema, probablemente será más fácil tener una sola solución con cada proyecto agregado.

NOTA: No necesita mover nada desde su ubicación actual.

Simplemente cree una nueva solución vacía y haga clic con el botón derecho en Agregar> Proyecto existente ... para cada proyecto que desee incluir, permanecerán donde están en el disco, pero se abrirán al mismo tiempo.

Las soluciones actuales ("viejas") estarán disponibles también, tal como están.

Además, tenga en cuenta que si está editando el mismo proyecto en dos instancias de VS al mismo tiempo, le fallará la idea de volver a cargar el código fuente cuando se realice y guarde un cambio.

Lo más importante, tener los proyectos en la misma solución le permitirá agregar referencias entre ellos, en lugar de los archivos DLL.

0

Digamos que tiene una buena razón para tener tantos proyectos (por ejemplo, diferentes cantidades de analizadores disponibles para diferentes licencias de un producto).

dependencias de gestión en el estudio visual resulta muy fácil:

  • haga clic derecho en el nodo de la solución

  • Seleccione "Proyecto de Orden de composición ..."

Asegúrese de que cada proyecto no necesita un proyecto debajo de él en ese diálogo.

Acerca de "dónde implementar": Visual Studio lo hace bien de forma predeterminada. Si está depurando, saldrá a la carpeta de depuración de su solución, del mismo modo para la versión.

HTH.

+0

Lo curioso es que hemos intentado establecer un orden de compilación para las dependencias dentro de una solución. Mi.sln aparecería revisado en sourcesafe (sí, lo sé), pero no mostraría ningún cambio. – Jason

+0

Debe establecer Dependencias en cada proyecto de su solución a través de ese diálogo (observe el ComboBox allí). –

Cuestiones relacionadas