Ich möchte ein Werkzeug oder eine Technik, um die Frage zu beantworten "Welche Version der Datei X wurde verwendet, um Assembly abc.dll zu erstellen?" Ich bin vor kurzem zu einer .NET-Entwicklergruppe gewechselt, und es scheint, als käme diese Frage immer wieder auf, in der einen oder anderen Form, und wir haben sie nicht im Griff. Jemand sagt etwas wie "Hey, ist dein letzter Code auf dem Testserver?" und die Antwort ist zwangsläufig etwas wie "Ich weiß es nicht".Verfolgen der Versionskontrolle auf Dateiebene in Builds mit Visual Studio und .NET?
Zurück in den alten Tagen der Unix-Entwicklung (Ich bin da mit mir selbst), hatte die SCCS-Quellcodeverwaltung special keywords wie% I% (Version) und% M% (Modulname), die Sie in Ihrem platzieren könnten Datei, die bei jedem Auschecken der Datei durch die entsprechende SCCS-Versionsinformation ersetzt wird. Sie könnten also einfach einen konstanten String zu "% I%% M%" in Ihrer Quelldatei zuweisen, kompilieren und dann die Unix "strings" command auf Ihrer resultierenden Bibliothek ausführen, um festzustellen, welche Versionen der Dateien zum Erstellen dieser Datei verwendet wurden .
habe ich einen schnellen Test zum Roll-my-own in einer C# Klassendatei wie folgt aus:
public const String VERSION_STRING = "*VERSION* = MyClass 1.0";
diese Befehlszeilen auf meinem DLL-Verzeichnis Dann lief:
>for %f in (*.dll) do find "VERSION" %f
Aber die Ergebnisse waren:
---------- MYASSEMBLY.DLL
VERSION_STRING
die nicht ganz, was ich war nach (es mir den Namen der konstante gab, aber keiner der Version info Ich hatte versucht, manuell in die Klasse einzubetten).
Für was es wert ist, verwenden wir derzeit Clearcase für unsere Versionskontrolle (derzeit der Unternehmensstandard). In Clearcase gibt es einige Tools, die uns hier helfen können (wie clearaudit), aber das würde einige Anstrengungen zur Verfeinerung und Umrüstung unseres Build-Prozesses erfordern. Ich sollte auch erwähnen, dass wir erwägen, einen Wechsel zu Subversion zu steuern. Also denke ich, dass Lösungen, die mit .NET in verschiedenen Versionskontrollsystemen oder Build-Umgebungen (MSBuild, NAnt, CruiseControl) funktionieren, ein faires Spiel sind.
Gibt es noch andere, besonders .NET-zentrierte Lösungen, um zu verfolgen, welche Version welcher Datei in welche Baugruppe importiert wurde?
Ja, mir ist klar, dass das Einbetten von Versionsinformationen mit Clearcase keine gute Option ist. Es ist schade, dass es nicht mehr wie SCCS oder RCS funktioniert, wo die Versionsinformationen bei Bedarf ersetzt werden können, aber nicht in der Datei gespeichert werden. Aber nachdem ich diesen Link gelesen habe, kann ich sehen, wo dieser Ansatz auch ein paar Probleme haben kann. Ich denke, dass hier der Ansatz von Clearcase, einen separaten "Konfigurationsdatensatz" für abgeleitete Objekte zu erstellen, sehr hilfreich ist. (Sie könnten sogar die Versionsnotiz aus dem Konfigurationsdatensatz erstellen, wenn Sie so geneigt waren). –
@ Ogre: In der Tat, aber in der Praxis haben wir nie wirklich DO verwendet. Eine allgemeinere Liste von Versionen, geschrieben nach dem Build, war genug für uns. – VonC
Von den Lösungen und Antworten, die ich bisher vorgestellt habe, gefällt mir diese Version am besten. Ob Sie Nant oder Msbuild verwenden, sollte es nicht zu schwierig sein, diese Art von Lösung zu automatisieren. –