Sollte eine SLN zur Quellcodeverwaltung verpflichtet werden?

101

Ist es eine bewährte Methode, eine SLN-Datei für die Quellcodeverwaltung festzuschreiben? Wann ist dies angemessen oder unangemessen?

Update In den Antworten wurden mehrere gute Punkte hervorgehoben. Danke für die Antworten!

jlembke
quelle
21
Ich glaube, es ist die .SUO-Datei, die Sie NICHT festschreiben möchten.
Apandit
Nur zur Veranschaulichung, ich glaube, dass Aufgabenlisten (wenn Sie sie verwenden) in der .SUO-Datei gespeichert sind ... Obwohl Sie sie möglicherweise nicht für die Quellcodeverwaltung festlegen möchten, möchten Sie sie möglicherweise nicht einfach als löschen fremde Kruft.
Benjol

Antworten:

69

Ich denke, aus den anderen Antworten geht hervor, dass Lösungsdateien nützlich sind und festgeschrieben werden sollten, auch wenn sie nicht für offizielle Builds verwendet werden. Sie sind praktisch für alle, die Visual Studio-Funktionen wie Gehe zu Definition / Deklaration verwenden.

Standardmäßig enthalten sie keine absoluten Pfade oder andere maschinenspezifische Artefakte. (Leider verwalten einige Add-In-Tools diese Eigenschaft nicht ordnungsgemäß, z. B. AMD CodeAnalyst.) Wenn Sie in Ihren Projektdateien (sowohl C ++ als auch C #) relative Pfade verwenden, sind diese maschinenunabhängig auch.

Die wahrscheinlich nützlichere Frage ist: Welche Dateien sollten Sie ausschließen? Hier ist der Inhalt meiner .gitignore-Datei für meine VS 2008-Projekte:

*.suo
*.user
*.ncb
Debug/
Release/
CodeAnalyst/

(Der letzte Eintrag ist nur für den AMD CodeAnalyst-Profiler.)

Für VS 2010 sollten Sie außerdem Folgendes ausschließen:

ipch/
*.sdf
*.opensdf
Trevor Robinson
quelle
2
Ich habe auch eine Ignorierregel für Unit-Testergebnisse. Einige Leute mögen sie einchecken, aber ich mag die Unordnung nicht
Matthew Whited
9
+1 - Ich persönlich begebe auch nichts, was gebaut wird, also bin / und obj /
Steven Evers
Ich schreibe nur .sln-Dateien, die mehr als 1 Projekt enthalten
Justin
2
Hier ist meine Subversion Globales Ignoriermuster: * .vsmdi * .suo * / [Bb] in [Bb] in * / obj obj TestResults *. [Uu] ser * Thumbs.db * Web.Publish.xml * WebApplication.Publish. xml * Web.log
Merritt
Hier ist eine häufig gemeinsam genutzte Gitignore-Datei, die temporäre Dateien, Build-Ergebnisse und Dateien enthält, die von gängigen Visual Studio-Add-Ons generiert wurden.
Lauren Van Sloun
58

Ja - ich denke es ist immer angemessen. Benutzerspezifische Einstellungen befinden sich in anderen Dateien.

Lou Franco
quelle
3
Auf jeden Fall hat die .sln Verweise auf die .prj-Dateien (Projekte)
dplante
20

Ja, das solltest du tun. Eine Lösungsdatei enthält nur Informationen zur Gesamtstruktur Ihrer Lösung. Die Informationen sind global für die Lösung und werden wahrscheinlich allen Entwicklern in Ihrem Projekt gemeinsam.

Es enthält keine benutzerspezifischen Einstellungen.

JaredPar
quelle
13

Du solltest es auf jeden Fall haben. Neben den Gründen, die andere erwähnt haben, ist es notwendig, einen schrittweisen Aufbau des gesamten Projekts zu ermöglichen.

Mehrdad Afshari
quelle
8

Ich stimme im Allgemeinen zu, dass Lösungsdateien eingecheckt werden sollten. In der Firma, für die ich arbeite, haben wir jedoch etwas anderes getan. Wir haben ein ziemlich großes Repository und Entwickler arbeiten von Zeit zu Zeit an verschiedenen Teilen des Systems. Um unsere Arbeitsweise zu unterstützen, hätten wir entweder eine große oder mehrere kleinere Lösungsdateien. Beide weisen einige Mängel auf und erfordern manuelle Arbeit seitens der Entwickler. Um dies zu vermeiden, haben wir ein Plug-In erstellt, das all das erledigt.

Mit dem Plug-In kann jeder Entwickler eine Teilmenge des Quellbaums auschecken, um daran zu arbeiten, indem er einfach die relevanten Projekte aus dem Repository auswählt. Das Plugin generiert dann eine Lösungsdatei und ändert die Projektdateien im laufenden Betrieb für die angegebene Lösung. Es behandelt auch Referenzen. Mit anderen Worten, der Entwickler muss lediglich die entsprechenden Projekte auswählen und anschließend die erforderlichen Dateien generieren / ändern. Auf diese Weise können wir auch verschiedene andere Einstellungen anpassen, um Unternehmensstandards sicherzustellen.

Zusätzlich verwenden wir das Plug-In, um verschiedene Check-In-Richtlinien zu unterstützen, die im Allgemeinen verhindern, dass Benutzer fehlerhaften / nicht konformen Code an das Repository senden.

Brian Rasmussen
quelle
Klingt so, als wäre dies die Antwort auf eine meiner lange unbeantworteten Fragen ( stackoverflow.com/questions/1490728/… ). Gibt es eine Chance, eine Kopie dieses Plugins zu erhalten?
Benjol
@ Benjol: Sorry, nein, es ist ein internes Tool. Zusätzlich zu den oben genannten Funktionen lässt es sich auch in eine Reihe anderer interner Systeme integrieren, sodass es sehr spezifisch ist, wie wir die Dinge ausführen. Wenn Sie nur den Teil der Lösung / des Projekts benötigen, ist die Implementierung nicht so schwierig.
Brian Rasmussen
OK, nur eine Sache, haben Sie in Ihrer 'großen Lösung' Projektreferenzen oder Dateireferenzen? Und wenn ein Entwickler einen neuen Verweis auf eine Datei / ein Projekt hinzufügt, führt das Plugin vor dem Einchecken die entsprechende Konvertierung zurück? Und wie gehen Sie mit den Abhängigkeiten um, die der Entwickler nicht zum Auschecken ausgewählt hat?
Benjol
8

Ja, Dinge, die Sie begehen sollten, sind:

  • Lösung (* .sln),
  • Projektdateien,
  • alle Quelldateien,
  • App-Konfigurationsdateien
  • Skripte erstellen

Dinge, die Sie nicht begehen sollten , sind:

  • Lösungsbenutzeroptionen (.suo) Dateien,
  • Generierte Dateien erstellen (z. B. mithilfe eines Build-Skripts) [Bearbeiten:] - nur, wenn alle erforderlichen Build-Skripte und -Tools unter Versionskontrolle verfügbar sind (um sicherzustellen, dass Builds im Lebenslaufverlauf authentisch sind).

In Bezug auf andere automatisch generierte Dateien gibt es einen separaten Thread .

Groo
quelle
1
Ich muss mit "jeder automatisch generierten Datei" nicht einverstanden sein.
Mehrdad Afshari
@Mehrdad denkst du, dass die Intelisense-Dateien auch festgeschrieben werden sollten?
Edison Gustavo Muenz
1
@ Edison: Nein. Ich beziehe mich auf automatisch generierte Quelldateien wie beispielsweise den Datenkontext LINQ to SQL.
Mehrdad Afshari
2
Werden Formname.Designer.cs-Dateien nicht als automatisch generiert betrachtet?
Jason
1
Was ich meinte, waren Dateien, die während der Erstellungszeit generiert wurden. Ich finde das oft - jemand schreibt eine Datei fest, die automatisch erstellt wird, und dann meldet SVN eine Änderung, nur weil ein Kommentar geändert wurde.
Groo
5

Ja, es sollte Teil der Quellcodeverwaltung sein. Wann immer Sie Projekte zu Ihrer Anwendung hinzufügen oder daraus entfernen, wird .sln aktualisiert und es wäre gut, es unter Quellcodeverwaltung zu haben. Es würde Ihnen ermöglichen, Ihre Anwendungscode 2-Versionen zurück zu ziehen und direkt einen Build durchzuführen (falls überhaupt erforderlich).

Arnkrishn
quelle
5

In den meisten Fällen empfiehlt es sich, SLN-Dateien für die Quellcodeverwaltung zu übernehmen.

Wenn Ihre SLN-Dateien von einem anderen Tool (z. B. CMake) generiert werden, ist es wahrscheinlich unangemessen, sie in die Quellcodeverwaltung zu übernehmen.

Ferruccio
quelle
4

Ja, Sie möchten immer die SLN-Datei einschließen. Sie enthält die Links zu allen Projekten, die in der Lösung enthalten sind.

Josh Weatherly
quelle
2

Wir tun es, weil es alles synchron hält. Alle notwendigen Projekte befinden sich zusammen und niemand muss sich Sorgen machen, dass eines fehlt. Unser Build-Server (Ant Hill Pro) verwendet auch die SLN, um herauszufinden, welche Projekte für eine Version erstellt werden sollen.

kemiller2002
quelle
2

Normalerweise legen wir alle unsere Lösungsdateien in einem Lösungsverzeichnis ab. Auf diese Weise trennen wir die Lösung ein wenig vom Code, und es ist einfacher, das Projekt auszuwählen, an dem ich arbeiten muss.

MayorAwesome
quelle
1

Der einzige Fall, in dem Sie sogar in Betracht ziehen würden, es nicht in der Quellcodeverwaltung zu speichern, wäre, wenn Sie eine große Lösung mit vielen Projekten in der Quellcodeverwaltung hätten und für einige eine kleine Lösung mit einigen der Projekte aus der Hauptlösung erstellen möchten private vorübergehende Anforderung.

Joe
quelle
1

Ja - Alles, was zur Generierung Ihres Produkts verwendet wird, sollte sich in der Quellcodeverwaltung befinden.

Michael
quelle
1

Wir speichern oder lösen Dateien in TFS Version Control. Da die Hauptlösung jedoch sehr groß ist, haben die meisten Entwickler eine persönliche Lösung, die nur das enthält, was sie benötigen. Die Hauptlösungsdatei wird hauptsächlich vom Build-Server verwendet.

Sylvain Rodrigue
quelle
0

.slns sind das einzige, mit dem wir in tfs keine Probleme hatten!

Code Silberrücken
quelle
1
Das ist lustig ... SLNs waren die einzigen Dateien, die ich jemals reparieren musste ... aber die Probleme wurden dadurch verursacht, dass Entwickler bei Zusammenführungen nicht vorsichtig waren.
Matthew Whited