2012-04-02 8 views
3

Ich verwende PowerShell, um eine Reihe von Konfigurationsdateien in einer Lösung zu ändern. Die Lösung unterliegt der Kontrolle von TFS 2010.Verwenden von PowerShell und TFS.exe zum Aktualisieren und Löschen von Dateien aus Projekten

Die Lösung hat viele Projekte und die Konfigurationsdateien sind alle XML-Dateien. Der einfache Teil ist, wenn ich nur eine Datei ändern muss, überprüfe ich es mit dem Befehl checkout, dann speichern Sie die Datei, wenn ich fertig bin. Alles gut. Ich gehe in Visual Studio und sehe, dass die geänderten Dateien mit ausstehenden Änderungen aktualisiert werden, wie ich erwarten würde

Der Teil, mit dem ich Schwierigkeiten habe, ist, wenn ich eine Konfigurationsdatei habe, die nicht mehr benötigt wird und gelöscht werden kann. Mit dem Löschbefehl wird die Datei zwar für ein ausstehendes Löschen markiert, aber die Projektdatei, in der die gelöschte Datei enthalten ist, wird nicht geändert.

Wenn ich eine Datei über Visual Studio lösche, checkt sie automatisch die Projektdatei für mich aus und ändert sie. Ich bekomme nicht das gleiche Ergebnis, wenn ich eine Befehlszeile lösche.

Es ist nicht praktisch für mich, dies manuell zu tun, da ich über 1000 Dateien beseitige.

Jede Hilfe würde sehr geschätzt werden!

Vielen Dank.

+0

Das Problem scheint mehr zu sein, wie der Visual Studio-Löschbefehl Skript. –

Antwort

2

Hier arbeiten zwei Komponenten. Wenn Sie innerhalb von VS arbeiten, verarbeitet das Projektsystem alle Dateibefehle (Hinzufügen, Löschen, Bearbeiten usw.) und ruft dann das TFS-Objektmodell auf, um die Änderungen in TFS tatsächlich anzuhängen. Das Projektsystem ist auch hier verantwortlich für das Entfernen der Referenz aus der Projektdatei. Der TFS-OM weiß nicht, ob eine Datei Teil eines Projekts ist oder nicht, wenn sie außerhalb von Visual Studio ausgeführt wird.

Wenn Sie eine Liste der XML-Dateien haben, die Sie löschen müssen, schreiben Sie am besten ein Skript, das diese einliest und aus der Projektdatei entfernt (nachdem eine Bearbeitung der Projektdatei aussteht) .

-Taylor, TFS Version Control Development Blei

+0

Ich hatte Angst, die Antwort könnte in diese Richtung gehen. Danke für Ihre Antwort. –

+0

Eigentlich nur noch eine Frage, wenn es Ihnen nichts ausmacht. Gibt es eine Möglichkeit, dies zu tun, indem Sie das Skript innerhalb von VS mithilfe der DTE ausführen, wenn ich das Projekt kenne, das der Datei zugeordnet ist, die ich entfernen muss? –

+0

Ich bin mir nicht sicher von der Spitze meines Kopfes. Ich werde heute etwas recherchieren und versuchen, bald zu Ihnen zurück zu kommen. –

1

Vielen Dank für Ihre Antworten. Nach vielem Graben und Versuch und Irrtum fand ich es heraus. Es war viel einfacher als ich es gemacht hatte.

Kurz gesagt, ich benutzte DTE und lief mein Skript innerhalb von VS mit der PowerShell-Konsole. Es ging ungefähr so:

$mySolution = $dte.Solution 
$projectItem = $mySolution.FindProjectItem($fileToRemove) 

if ($projectItem -ne $null) 
{      
    $projectItem.Remove()      
} 

das Entfernen Ausführen() Befehl auf der ProjectItem aus prüft das entsprechende Projekt und bearbeitet sie entsprechend.

Nochmals vielen Dank für die Zeit, die Sie alle nahmen, um meine Frage zu sehen und zu antworten. Hoffe, das hilft einem anderen irgendwann!

Verwandte Themen