Frage

Wie erhalte ich rekursiv die neueste Version meiner Lösung, wie es im Kontextmenü des Lösungs-Explorers von Visual Studio geschieht?Ich möchte dies über die Befehlszeile oder über ein Makro tun.Ich versuche, einen Teil meiner täglichen Routine mithilfe einer Reihe von Batchdateien zu automatisieren.Ich bin sicher, dass viele Entwickler so etwas gerne hätten.

tf get Ruft den Inhalt eines Ordners nur rekursiv ab (keine Lösung).Projektabhängigkeiten usw. werden nicht berücksichtigt.Das wird nicht funktionieren.

War es hilfreich?

Lösung

TFS hat eine .Net SDK Damit können Sie Ihre eigenen benutzerdefinierten Programme erstellen, die mit einem TFS-Server interagieren.Sie könnten ein kleines Programm schreiben, das die von Ihnen benötigte Aufgabe ausführt:

TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer("MyServer");
VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));

WorkSpace[] myWorkSpaces = vcs.QueryWorkSpaces("MyWorkSpaceName", "MyLoginName", "MyComputer");

myWorkSpaces[0].Get(VersionSpec.Latest, GetOptions.GetAll);

Andere Tipps

Ich stimme zu, dass Solution Explorer alle diese Objekte „absichtlich“ weglässt, aber nur, wenn Sie sie nicht als Lösungselemente einschließen, was meiner Meinung nach der Fall ist sollen in Ihre Lösungen einbeziehen, sodass ein Neuling die Lösung öffnen, einen Get Latest durchführen und wissen kann, dass er über alle für diese Lösung erforderlichen Abhängigkeiten verfügt, und nicht lernen muss, wie man das über ein Befehlszeilentool macht oder die Quellcodeverwaltung verwendet Explorer, wenn sie nicht wollen.

Das Einbeziehen aller Nicht-Code-Abhängigkeiten als Lösungselemente (wir organisieren die Lösungsordner mit derselben Ordnerstruktur wie ihre Quellcodeverwaltungsordner) reduziert das „Voodoo“-Wissen, das zum Öffnen und Kompilieren der Lösung für neue Entwickler in einem Projekt erforderlich ist.

Es wäre gut, wenn Sie ganze Ordnerbäume mit einem Lösungsordner in der VS-Lösung verknüpfen könnten.

Wenn Sie abhängige Projekte in einem anderen Ordner haben.Verwenden Sie dies, um alle Unterverzeichnisse zu durchlaufen, um für jedes Projekt das Neueste abzurufen:

Beginnen Sie im Hauptverzeichnis C:\Project\SupportingProjects

FOR /D %%G IN ("*") DO ECHO ..from....%%G && tf get C:\Projects\SupportingProjects\%%G 

::Get the latest for the Main project
tf get C:\Projects\MainProject /recursive 

In meinem Fall enthält der MainProject-Ordner die Lösungsdatei und die Projektdatei.

Ich fand das einfach und unkompliziert.

Mehr zum FOR-Befehl: http://ss64.com/nt/for_d.html

Also...Es sieht so aus, als hätten Sie drei Möglichkeiten.

  1. Geben Sie in Ihrer Batchdatei an jedem gewünschten Verzeichniszweig ein tf get aus.

  2. Reorganisieren Sie Ihre Lösung so, dass sich alle Abhängigkeiten unter demselben Stammpfad befinden.

  3. Verwenden Sie die visuelle Methode, indem Sie mit der rechten Maustaste auf das geladene Projekt klicken und den Befehl „get“ erteilen.

Die tatsächliche Lösungserkennung erfolgt nur dann, wenn das Projekt in die IDE geladen wird.oder wenn es von den Build-Servern geladen wird.

Ich weiß, dass Sie Batchdateien erwähnt haben, aber lassen Sie mich noch etwas anderes für Sie erwähnen.

Ich gehe davon aus, dass Sie die Version 2005 von TFS verwenden.2008 verfügt über alle integrierten Planungsfunktionen.

Sie könnten jedoch auch verwenden CruiseControl.net um geplante Builds für Sie durchzuführen.Ich habe sowohl TFS 2008 als auch CruiseControl verwendet und beide scheinen einwandfrei zu funktionieren.

Eine weitere mögliche Lösung ist die Verwendung von Powershell.Der folgende Link führt zu einem Codeprojektbeispiel, das zeigt, wie man eine Lösung von TFS erhält und lokal erstellt.Powershell ist eine viel bessere Lösung als normale Batchdateien.

http://www.codeproject.com/KB/install/ExtractAndBuild.aspx

Tun Sie das nicht.VS ist bei weitem nicht so schlau, wie Sie denken.(Wie die mysteriösen und vergeblichen Kaufabwicklungen belegen, die jeder seit mehr als drei Produktzyklen erlebt hat, Sie und ich eingeschlossen.Dies ist kein Zeichen für ein zuverlässiges System!)

Was Sie beschreiben, funktioniert nur für Projekt-zu-Projekt-Referenzen.Beim Ausführen von Quellcodeverwaltungsvorgängen im Projektmappen-Explorer wird „beabsichtigt“ Folgendes weggelassen:

  • Projekt-zu-Assembly-Referenzen
  • Video, Ton, PDFs und jede andere Art von Medien, die VS nicht unterstützt, aber möglicherweise eine integrale Rolle im Produkt spielen
  • MSBuild *.targets-Dateien, auf die in Ihren Projekten verwiesen wird
  • alle Dateien jeglicher Art, auf die von benutzerdefinierten Zielen aus verwiesen wird
  • alle für den Build-Prozess erforderlichen ausführbaren Dateien von Drittanbietern
  • usw

Sag nur NEIN zu unvollständiger Synchronisierung führen.Auf diesem Weg gibt es nur noch Kopfschmerzen.

Führen Sie „tf get“ ohne Pfadbereich über die Befehlszeile aus oder klicken Sie mit der rechten Maustaste -> Vom Stammknoten $/ im Quellcodeverwaltungs-Explorer abrufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top