Ich habe vor kurzem angefangen, für einen neuen Client mit einer alten Codebasis zu arbeiten, in der es mehrere .net-Lösungen gibt. Jede hostet normalerweise einige Projekte, die für diese Lösung spezifisch sind, aber dann "leihen" / "verknüpfen" (bestehendes Projekt hinzufügen) einige andere Projekte was technisch zu anderen Lösungen gehört (zumindest wenn man sich an die Ordnerstruktur in TFS hält)
Ich habe noch nie ein derart verflochtenes Setup gesehen, es gibt keine eindeutige Erstellungsreihenfolge, manchmal verweist ein Projekt in Lösung A direkt auf DLLs aus dem Ausgabeverzeichnis eines Projekts in Lösung B, manchmal wurde das Projekt auch dann direkt aufgenommen, wenn es sich befindet Weit weg in der Ordnerstruktur.
Es sieht so aus, als ob alles für die Faulheit der Entwickler optimiert wurde.
Als ich sie mit der Frage konfrontierte, warum sie keinen CI-Server hatten, antworteten sie, dass es schwierig sei, den Code so einzurichten, wie er ist. (Ich richte es jetzt ein und verfluche diese Code-Organisation)
Die Lösungen sind nach Bereitstellungsartefakten organisiert (Dinge, die zusammen bereitgestellt werden müssen, befinden sich in derselben Lösung). Ich halte dies für eine kluge Entscheidung, aber der Inhalt dieser Lösungen (der Projekte) ist allgegenwärtig.
Besteht ein Konsens über eine bewährte Methode für die Wiederverwendung gemeinsamer Klassenbibliotheken für mehrere Lösungen / Bereitstellungsartefakte?
- So strukturieren Sie Code im VCS
- Erleichterung der gemeinsamen Nutzung von Geschäftslogik zwischen verschiedenen Bereitstellungsartefakten
quelle
Ich habe solche TFS-Strukturen wie die von Ihnen erwähnte organisiert und obwohl sie CI vor einzigartige Herausforderungen stellen, haben sie eine Reihe von Vorteilen. Eines ist klar: Es unterstützt und fördert die ordnungsgemäße Komponentisierung in separaten .NET-Projekten und unterstützt somit eine gute TDD, indem es eine 100% ige Testabdeckung fördert. Gleich nach dem Start stelle ich ein paar Probleme fest, die Sie angehen können.
Binäre Verweise auf die Ausgabe anderer Verzeichnisse sind kein guter Ansatz und werden zu einem schlechten Ansatz, wenn sie auch mit Projektverweisen vermischt werden. Versuchen Sie, das eine oder andere zu tun, und ändern Sie Ihre Binärreferenzen vorzugsweise zumindest aus Gründen der Konsistenz in Projektreferenzen. Zu diesem Zeitpunkt kann jede Lösung eine einzelne erstellbare Anwendung oder Anwendungsebene darstellen (z. B. SuperApp.sln, OtherAppServices.sln, OtherAppPresentationTier.sln).
Um ALLE Projekte zu erstellen, empfehle ich, auch eine Master-Lösung zu erstellen. Die Master-Lösung verfügt über Projektverweise auf alles und ist im Wesentlichen nur zum Vorteil eines einzigen Build-Befehls vorhanden, der alle Projekte in der Anwendungssuite verarbeitet. Entwickler sollten die Master-Lösung nicht für die aktive Entwicklung oder das Debuggen verwenden. Dies erleichtert das Zusammensetzen der Build-Artefakte erheblich.
Die Bereitstellung kann dann mit einem einfachen Batch-, Powershell- oder Perl-Skript erfolgen. Dadurch wird im Wesentlichen die entsprechende Lösung oder die Master-Lösung erstellt und anschließend alles in den entsprechenden Umgebungen bereitgestellt. Dies kann leicht in jeden CI-Server integriert werden, wenn es richtig gemacht wird.
Erstellen Sie ein Projekt für die allgemeine Geschäftslogik, oder lösen Sie die Probleme für eine globalere oder universellere Geschäftslogik besser auf. Alle implementierbaren Lösungen, die darauf verweisen möchten, sollten dies durch eine Projektreferenz tun.
Wenn Sie Ihren Code in TFS organisieren, können Sie dies einfacher erreichen, indem Sie gemeinsame oder gemeinsam genutzte Projekte in der Verzeichnisstruktur auf einer höheren Ebene speichern.
quelle