Structure de répertoire pour une solution .NET

16

Nous avons eu récemment une visite d'entrepreneur qui a remis en question notre méthodologie de structuration des projets. Veuillez noter que je fais spécifiquement référence à la structure du répertoire. Il a suggéré d'utiliser les directives de Microsoft. Je pensais que je serais en mesure de Google "Microsoft directives structure de répertoire de projet .NET" et trouver quelque chose d'utile, mais cela s'est avéré ne pas être le cas. En l'état, nous faisons quelque chose comme ceci:

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

Le dossier doc contient une solution Sandcastle comme celle décrite ici: https://www.codeproject.com/Articles/15176/Sandcastle-Help-File-Builder (voir: chemins absolus et relatifs). Par conséquent, le dossier doc contient un dossier d'aide, qui contient le fichier d'aide généré. Le dossier lib contient tous les packages Nuget.

Existe-t-il des directives Microsoft qui recommandent comment structurer une solution? J'ai regardé ici: /programming/789389/project-structure-for-c-sharp-development-effort/789554?noredirect=1#comment86756309_789554 entre autres endroits. La plupart des articles et des questions que j'ai lus semblent avoir été créés en 2007-2009. Je crois que Nuget a été introduit en 2010. Existe-t-il des directives Microsoft? J'ai lu quelque chose sur Tree Surgeon, mais cela ne semble plus exister: https://archive.codeplex.com/?p=treesurgeon .

J'utilise TFS; Le régulateur de vitesse et le DDD font toute la différence.

w0051977
la source
4
Les structures de répertoires sont avant tout une question de goût. Utilisez la structure de dossiers qui indique le plus clairement les intentions de votre projet / organisation.
Robert Harvey
5
De plus, la prochaine fois que quelqu'un vous dira que vous devez suivre les «directives Microsoft» à propos de quelque chose, demandez à cette personne de fournir ces directives ou de vous montrer où vous pouvez les trouver. Sinon, ce sont des conseils inutiles.
Robert Harvey
2
le bit impair met des paquets nuget dans lib au lieu de paquets
Ewan
1
@Ewan, les paquets nuget n'appartiennent même packagesplus, pour les projets de style dotnetcore et VS2017. Ils vivent désormais dans les objrépertoires des projets .
David Arno
2
pff! mise à niveau?!?!? sonne comme si ça pouvait casser des trucs
Ewan

Réponses:

20

Sur MSDN, il existe de très anciennes directives officielles . Celles-ci sont cependant obsolètes. Comme le dit la page, " Ce contenu est obsolète et n'est plus maintenu. Il est fourni à titre gracieux pour les personnes qui utilisent encore ces technologies. " Je vous recommande donc d'éviter ces directives.

On a tenté de définir une structure de solution commune via Project Scaffold . Ceci est plus orienté vers F # que vers C #. Cela n'a pas vraiment décollé cependant et il y a peu de signes de développement des idées ces jours-ci.

L'ensemble de directives le plus actif et le plus à jour est géré par David Fowler, développeur chez Microsoft au sein de l'équipe ASP.NET. Ces lignes directrices sont utilisées par de nombreuses personnes au sein de Microsoft, y compris les équipes Roslyn (le compilateur C # et VB.Net). Vous pourriez donc faire bien pire que d'adopter cette approche.

David Arno
la source
J'ai vu les deux premiers liens, mais pas le troisième. +1 pour le troisième lien. Dois-je placer l'intégralité de mon projet Sandcastle dans le dossier docs ou uniquement les fichiers d'aide générés par le projet Sandcastle? Je ne sais pas pourquoi cette réponse a été rejetée.
w0051977
1
Pour être honnête, chaque page qui n'est pas incluse dans le nouveau système de documentation de Microsoft est estampillée avec les mots «ce contenu est obsolète et n'est plus maintenu». Cela ne signifie pas qu'il n'y a pas d'informations utiles.
Robert Harvey
Où mettriez-vous les spécifications? Dans le dossier Tests ou dans un répertoire appelé Specs (dans le même répertoire que le dossier src)? Je suppose que cela n'a pas trop d'importance.
w0051977
@RobertHarvey: Très bien, mais se référer à cette page seule sans rien de plus pour la sauvegarder n'est pas non plus une raison pour changer la structure du dossier du projet si une autre a déjà été établie.
Flater
Vous pouvez voir les directives de David Fowlers en pratique dans la plupart des projets open source de GitHub, par exemple Enity Framework .
pfx