Estructura de directorios para una solución .NET

16

Recientemente tuvimos una visita de contratista que cuestionó nuestra metodología de estructuración de proyectos. Tenga en cuenta que me estoy refiriendo específicamente a la estructura del directorio. Sugirió usar las pautas de Microsoft. Pensé que sería capaz de buscar en Google "la estructura de directorios del proyecto .NET de las directrices de Microsoft" y encontrar algo útil, sin embargo, esto ha demostrado no ser el caso. Tal como están las cosas, hacemos algo como esto:

[Company.System.Feature]
  |-doc
     |Sandcastle project
  |-lib
     |Nuget packages
  |-src
    |-Project1 e.g. web
    |-Project2 e.g. business logic
    |-UnittestProject1
    |-Specs

La carpeta doc contiene una solución de Sandcastle como la que se describe aquí: https://www.codeproject.com/Articles/15176/Sandcastle-Help-File-Builder (ver: rutas absolutas y relativas). Por lo tanto, la carpeta doc contiene una carpeta de Ayuda, que contiene el archivo de ayuda generado. La carpeta lib contiene todos los paquetes Nuget.

¿Hay alguna directriz de Microsoft que recomiende cómo estructurar una solución? He buscado aquí: /programming/789389/project-structure-for-c-sharp-development-effort/789554?noredirect=1#comment86756309_789554 entre otros lugares. La mayoría de los artículos y preguntas que he leído parecen haber sido creados entre 2007 y 2009. Creo que Nuget se introdujo en 2010. ¿Hay alguna guía de Microsoft? Leí sobre algo llamado Tree Surgeon, sin embargo, esto ya no parece existir: https://archive.codeplex.com/?p=treesurgeon .

Estoy usando TFS; Control de crucero y DDD es lo que hace la diferencia.

w0051977
fuente
44
Las estructuras de directorio son en gran medida una cuestión de gustos. Use la estructura de carpetas que establece más claramente las intenciones de su proyecto / organización.
Robert Harvey
55
Además, la próxima vez que alguien le diga que debe seguir las "Directrices de Microsoft" sobre algo, pídale a dicha persona que le proporcione esas directrices o le muestre dónde puede encontrarlas. De lo contrario, es un consejo inútil.
Robert Harvey
2
lo extraño es poner paquetes nuget en lib en lugar de paquetes
Ewan
1
@Ewan, los paquetes nuget ya ni siquiera pertenecen en packagesproyectos dotnetcore y VS2017. Ahora viven en los objdirectorios de los proyectos .
David Arno
2
pff! actualización?!?!? Parece que podría romper cosas
Ewan

Respuestas:

20

En MSDN, hay algunas pautas oficiales muy antiguas . Sin embargo, estos están desactualizados. Como dice la página, " Este contenido está desactualizado y ya no se mantiene. Se proporciona como cortesía para las personas que todavía usan estas tecnologías " . Por lo tanto, le recomiendo que evite estas pautas.

Hubo un intento de definir una estructura de solución común a través de Project Scaffold . Sin embargo, esto está más orientado hacia F #, en lugar de C #. Sin embargo, realmente no despegó y hay pocas señales de desarrollo de las ideas en estos días.

El conjunto de directrices más activo y actualizado lo mantiene David Fowler, desarrollador de Microsoft en el equipo ASP.NET. Muchos utilizan Microsoft estas pautas, incluidos los equipos de Roslyn (el compilador de C # y VB.Net). Por lo tanto, podría hacer mucho peor que adoptar ese enfoque.

David Arno
fuente
Vi los dos primeros enlaces, pero no el tercero. +1 para el tercer enlace. ¿Pondría todo mi proyecto Sandcastle en la carpeta docs o solo los archivos de Ayuda generados por el proyecto Sandcastle? No estoy seguro de por qué esta respuesta fue rechazada.
w0051977
1
Para ser justos, cada página que no está incluida en el nuevo sistema de documentación de Microsoft tiene las palabras "este contenido está desactualizado y ya no se mantiene". Eso no significa que no haya información útil allí.
Robert Harvey
¿Dónde pondrías las especificaciones? ¿En la carpeta Pruebas o en un directorio llamado Especificaciones (en el mismo directorio que la carpeta src)? Supongo que realmente no importa demasiado.
w0051977
@RobertHarvey: Bastante justo, pero referirse solo a esa página sin nada más que respaldarla tampoco es una razón para cambiar la estructura de la carpeta del proyecto si ya se ha establecido una diferente.
Flater
Puede ver las pautas de David Fowlers en la práctica en la mayoría de los proyectos de código abierto en GitHub, por ejemplo, Enity Framework .
pfx