2009-08-17 46 views
8

Necesito ayuda con la solución de Visual Studio y la organización de proyectos.Mejores prácticas para organizar una solución de Visual Studio

Tengo una solución con varios proyectos. Todos ellos están escritos en C# y se compilan como bibliotecas para ser utilizados por la GUI. Algunas de estas bibliotecas también tienen dependencias con otros. Por ejemplo, TestExecutive necesita LoggingFramework, Communications necesita LoggingFramework también.

¿Cuál es la mejor manera de organizar? Estoy pensando en una carpeta montajes para mantener los binarios de las bibliotecas en un solo lugar. Algo como:

Solution 
    | 
    |-- TestExecutive 
    |-- LoggingFramework 
    |-- assemblies 

También hay otro problema. Uno de los proyectos usa un dll C nativo. ¿Dónde tengo que colocar esta biblioteca? ¿Con el montaje de la biblioteca o con el ejecutable final?

EDIT:

Ok, ahora supongamos que tengo el programa de Windows Forms en ejecución. Tengo el código fuente y los binarios mezclados. ¿Qué características necesito para generar algo que pueda distribuir? Quiero decir, con todas las bibliotecas y archivos de configuración, pero sin código fuente. Lo he hecho antes con el instalador de Nullsoft, pero no sé si Visual Studio puede ayudarte a hacerlo.

+1

Uno de sus tipos de proyecto es un proyecto de instalador. Solo agrégalo a tu solución. Hay muchos tutoriales diseminados por la web o en MSDN. – Clyde

+0

cualquier solución final con código fuente completo de muestra trabajando al respecto? – Kiquenet

Respuesta

8

algunas cosas aquí:

  1. Cuando un proyecto depende de otro, se puede crear esa dependencia en Visual Studio. Haga clic con el botón derecho en un proyecto y seleccione Dependencias del proyecto ...

  2. Para otros ensambles .NET que NO son parte de su solución (herramientas de terceros, etc.) hago exactamente lo que mostró aquí - Tengo un separador carpeta paralela a los proyectos. Luego configuro la referencia de ensamblaje en cada uno de los proyectos con "Copiar local" configurado en verdadero y funciona bien.

  3. Para C dlls nativas, es un poco diferente. No hay referencias directas a ellos en la sección de referencias del explorador de soluciones. El compilador no va a mirar el dll para verificar sus referencias p/invoke o algo por el estilo. Solo necesita asegurarse de que el dll es parte de la implementación en su proyecto web o winforms de nivel superior. Es un archivo de contenido como un archivo o imagen css o algo así. Sólo tiene que añadir como un archivo en el proyecto y asegurarse de que la "Acción de generación" se ajusta al contenido de manera visual sabe que acaba de copiar el archivo de estudio como parte de la implementación

5

puse mis carpetas solución un poco diferente a ti En el nivel superior que tienen las siguientes carpetas:

\build 
\lib 
\src 

carpeta La acumulación tiene scripts de creación (NAnt, MSBuild, etc). Cualquier ensamblado de terceros (o cualquier cosa que no esté creando en la solución) se coloca en la carpeta lib, en una subcarpeta apropiada. Por ejemplo, tendré carpetas log4net, NUnit, RhinoMocks en la carpeta lib, cada una con los archivos necesarios para esa dependencia. La carpeta src tiene la solución y todos los archivos del proyecto.

Me gusta esta estructura porque claramente delinea el código del proyecto y otras cosas que requiere el proyecto. Además, generalmente configuro algunas tareas de construcción personalizadas para copiar los ensamblados resultantes para mi proyecto en una carpeta \ deploy o \ lib \.De esta forma, no tiene que buscar en la carpeta \ src \\ bin \\ para obtener un ensamblado integrado o todo el proyecto; sin embargo, esto parece un poco más allá del alcance de su pregunta.

Btw ... No se me ocurrió esta estructura por mi cuenta, creo que comencé a usar Tree Surgeon y desarrollé mi proceso a partir de ahí.

+0

No fuera del alcance del EDIT ;-) Gracias por la información. – yeyeyerman

+0

Tree Surgeon La serie de blogs "Tree Development" es realmente buena. –

+0

Me tomó un tiempo sacar las publicaciones. Puede encontrarlos [aquí] (https://mikebroberts.com/articles/how-to-setup-a-net-development-tree/). – Ryogi

Cuestiones relacionadas