Verzeichnisstruktur für eine .NET-Lösung

16

Wir hatten kürzlich einen Auftragnehmerbesuch, der unsere Methodik zur Strukturierung von Projekten in Frage stellte. Bitte beachten Sie, dass ich mich speziell auf die Verzeichnisstruktur beziehe. Er schlug vor, die Microsoft-Richtlinien zu verwenden. Ich dachte, ich wäre in der Lage, "Microsoft-Richtlinien .NET-Projektverzeichnisstruktur" zu googeln und etwas Hilfreiches zu finden, dies hat sich jedoch als nicht der Fall erwiesen. Zum jetzigen Zeitpunkt machen wir so etwas:

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

Der doc-Ordner enthält eine Sandcastle-Lösung wie die hier beschriebene: https://www.codeproject.com/Articles/15176/Sandcastle-Help-File-Builder (siehe: absolute und relative Pfade). Daher enthält der doc-Ordner einen Hilfeordner, der die generierte Hilfedatei enthält. Der lib-Ordner enthält alle Nuget-Pakete.

Gibt es Microsoft-Richtlinien, die empfehlen, eine Lösung zu strukturieren? Ich habe hier gesucht: /programming/789389/project-structure-for-c-sharp-development-effort/789554?noredirect=1#comment86756309_789554 unter anderen Orten. Die meisten Artikel und Fragen, die ich gelesen habe, scheinen von 2007 bis 2009 erstellt worden zu sein. Ich glaube, Nuget wurde 2010 eingeführt. Gibt es Microsoft-Richtlinien? Ich habe über etwas namens Tree Surgeon gelesen, aber dieses scheint nicht mehr zu existieren: https://archive.codeplex.com/?p=treesurgeon .

Ich benutze TFS; Cruise Control und DDD machen dabei keinen Unterschied.

w0051977
quelle
4
Verzeichnisstrukturen sind sehr Geschmackssache. Verwenden Sie die Ordnerstruktur, die Ihre Projekt- / Organisationsabsichten am deutlichsten wiedergibt.
Robert Harvey
5
Wenn das nächste Mal jemand sagt, Sie sollten "Microsoft-Richtlinien" zu etwas befolgen, bitten Sie die betreffende Person, diese Richtlinien bereitzustellen, oder zeigen Sie, wo Sie sie finden können. Ansonsten ist es sinnloser Rat.
Robert Harvey
2
das ungerade ist, nuget-pakete in lib anstelle von paketen zu setzen
Ewan
1
@Ewan, Nuget-Pakete gehören packagesfür Projekte im Dotnetcore- und VS2017-Stil nicht mehr dazu. Sie befinden sich jetzt in den objVerzeichnissen der Projekte .
David Arno
2
pff! Upgrade durchführen?!?!? klingt wie es Sachen brechen könnte
Ewan

Antworten:

20

Bei MSDN gibt es einige sehr alte offizielle Richtlinien . Diese sind jedoch veraltet. Wie auf der Seite steht: " Dieser Inhalt ist veraltet und wird nicht mehr gepflegt. Er wird Personen zur Verfügung gestellt, die diese Technologien noch verwenden. " Ich empfehle daher, diese Richtlinien zu vermeiden.

Es wurde versucht, über Project Scaffold eine gemeinsame Lösungsstruktur zu definieren . Dies ist jedoch eher auf F # als auf C # ausgerichtet. Es hat sich jedoch nicht wirklich bewährt und es gibt heutzutage kaum Anzeichen dafür, dass sich die Ideen weiterentwickeln.

Die aktivsten und aktuellsten Richtlinien werden von David Fowler verwaltet, der Entwickler bei Microsoft im ASP.NET-Team ist. Diese Richtlinien werden von vielen Microsoft-Mitarbeitern verwendet, einschließlich der Roslyn-Teams (C # - und VB.Net-Compiler). Sie könnten es weitaus schlimmer machen, als diesen Ansatz zu übernehmen.

David Arno
quelle
Ich habe die ersten beiden Links gesehen, aber nicht den dritten. +1 für den dritten Link. Würde ich mein gesamtes Sandcastle-Projekt in den Ordner docs stellen oder nur die Hilfedateien, die vom Sandcastle-Projekt generiert werden? Ich bin nicht sicher, warum diese Antwort abgelehnt wurde.
w0051977
1
Um fair zu sein, ist jede Seite, die nicht in das neue Dokumentationssystem von Microsoft aufgenommen wurde, mit der Aufschrift "Dieser Inhalt ist veraltet und wird nicht mehr gepflegt" versehen. Das bedeutet nicht, dass es dort keine nützlichen Informationen gibt.
Robert Harvey
Würdest du die Spezifikationen setzen? Im Ordner Tests oder in einem Verzeichnis namens Specs (im selben Verzeichnis wie der Ordner src)? Ich denke, es ist nicht wirklich wichtig zu viel.
w0051977
@RobertHarvey: Richtig, aber wenn Sie sich nur auf diese Seite beziehen und keine weiteren Sicherungskopien erstellen, ist dies auch kein Grund, die Struktur des Projektordners zu ändern, wenn bereits eine andere erstellt wurde.
Flater
Sie können David Fowlers Richtlinien in der Praxis bei den meisten Open-Source-Projekten bei GitHub sehen, z . B. Enity Framework .
pfx