12

Microsoft Visual Studio verwendet XML, um seine .vcproj Projektdateien zu speichern. So Diffing XML-Projektdateien sollte leicht sein.Vorschläge zum Verwalten von Visual Studio-vcproj-Projektdateien in Versionskontrolle

Leider, wenn Sie die Eigenschaften der Projektdatei ändern, besteht Visual Studio darauf, die XML-Knoten der Projektdatei zufällig zu mischen! Dies macht textuelles Differieren und Zusammenführen von Projektdateiänderungen im Grunde unmöglich. Wenn ich eine Compiler-Einstellung ändere, kann mein visuelles Diff-Tool denken, dass ich 50% der Zeilen in der Datei geändert habe! Ich habe sogar einige XML-Diff-Tools ausprobiert, aber sie zeigen nur eine strukturiertere Ansicht des gleichen Chaos.

Hat jemand irgendwelche Vorschläge für die Pflege von .vcproj Dateien in der Quellcodeverwaltung? Oder eine Möglichkeit, Visual Studio zu nicht zu überzeugen, die XML-Knoten in der Datei .vcproj neu anzuordnen?

(Ich habe auch Tools wie CMake untersucht mit .vcproj Dateien von einer diff freundlicher Textdatei zu generieren, aber CMake hat seine eigenen Probleme.)

Antwort

5

Dies scheint immer wieder zu kommen.

Vielleicht ist es ein Problem, reif für ein Plug-in oder einem anderen Normalisierungswerkzeug.

Es wäre ein großartiges Nebengeschäft, bis MS entscheidet, es zu beheben. Dann haben Sie kein Glück mehr - es sei denn, sie bieten Ihnen an, Ihre IP zu kaufen.

Wer möchte ein Open Source-Projekt oder kommerzielles Produkt starten? Ich bin Spiel.

Ich könnte ein Stand-alone Normalisierungstool ausprobieren, dann sehen, ob ich es in ein Plugin verwandeln kann.

+1

Ich denke, es wäre einfach, ein kurzes Python-Skript zu schreiben, um einen .vcproj-Dateien XML-Knoten zu alphabetisieren. Ich sehe, dass WinMerge Plugins hat, um XML zu diffundieren; vielleicht sollte jemand das "vcproj alphabetizer" WinMerge Plugin schreiben? Vielleicht werde ich. :) –

2

I WinMerge als mein Diff-Tool verwenden, und ich ermöglichte die bewegte Blockerkennung. Es behebt das Problem nicht ganz, aber es macht die Unterschiede etwas erträglicher.

0

In welcher Version von Visual Studio sehen Sie das?

Ich arbeite viel mit .vcproj-Dateien (wir verwalten Versionen der Projektdateien für unsere Bibliotheken in mehreren Visual Studio-Versionen, und ich bin immer Diffing und Zusammenführen der Dinge), aber ich habe dieses Verhalten noch nie gesehen .

+0

VS2008, aber ich habe gehört, dass VS2005 das gleiche Problem hat. Das "vcproj shuffle" geschieht zufällig. Meine Projekte haben einige Unterordner (Kopfzeilen und Quellen). Bei der Navigation wird VS gelegentlich die Projekte in der GUI neu anordnen und sie entweder nach dem Zufallsprinzip oder alphabetisch sortieren. Das könnte verwandt sein. –

+0

Danke. Ich werde das sicherlich im Auge behalten, und wenn ich etwas lerne, das helfen könnte, werde ich es hier veröffentlichen. –

0

Mein Team bei Adobe hat das Gleiche in vs2008 gesehen. Nur ein grundlegendes Debug/Release, Win32/Win64-Projekt gibt Ihnen 4 Konfigurationen und zufälliges Shuffling. Mehrere Leute haben versucht herauszufinden, wann und warum Devstudio nachbestellt, aber der aktuelle Gedanke ist, dass der Sortierschlüssel ein Keyword-Hash ist - daher halb zufällig. Wir haben aufgegeben und in Code-Reviews die "echten" Änderungen zusammengefasst.

+1

Warum erstellen Sie kein XSLT, das die .vcproj-Datei nach einer Standardsequenz neu anordnet? Tun Sie das für beide Dateien, die Sie im Vorfeld vergleichen, und Sie werden Äpfel mit Äpfeln vergleichen. Ich habe das mit SSIS-.dtsx-Dateien gemacht, die sich ändern, wenn man sie zu lange anstarrt. –

4

Wir sehen das hier jetzt bei der Arbeit, mit Projektdateien, bei denen die Konfigurationen auf mehreren Computern geändert werden, und es ist sehr frustrierend ...

* Hinweis: Wir nutzen alle VS 2008 Pro, nicht von Team

Zuerst sieht es aus wie sie zufällig neu geordnet werden, aber es ist in der Tat ein Muster und es ist nicht zufällig überhaupt .

Für eine Gruppe der Konfigurationen werden von Platform bestellt, dann durch Config:

  • Debug | Win32
  • Debug | x64
  • Release | Win32
  • Release | x64
  • Debug DX11 | Win32
  • Debug DX11 | x64
  • Veröffentlichung DX11 | Win32
  • Veröffentlichung DX11 | x64
  • ...

Für die andere Gruppe der Konfigurationen von Config bestellt werden, dann von Plattform:

  • Debug | Win32
  • Release | Win32
  • 012.351.
  • Debug DX11 | Win32
  • Veröffentlichung DX11 | Win32
  • Debug | x64
  • Release | x64
  • Debug DX11 | x64
  • Veröffentlichung DX11 | x64
  • ...

Wenn man sich die Notlaufhistorie anschaut, stimmt das mit mehreren Projekten überein, die von denselben Gruppen von Leuten eingereicht wurden, und es gibt etwa 50/50 Split, so dass es nicht nur für eine Person passiert.

Ist das das gleiche Problem, das Sie alle sehen? Wenn ja, hoffe ich, dass dieses Muster hilft, eine Lösung zu finden, die keinen Makro/Extra-Diff-Schritt beinhaltet ...

Es muss irgendwo eine Einstellung sein, oder ein Nebeneffekt des Klickens auf etwas, da es zu 100% ist reproduzierbar für jede dieser Maschinen. Selbst wenn es etwas dummes ist, wie die Option, die Sie für Ihr anfängliches Umgebungslayout auswählen (VC++, VB, allgemeine Entwicklung usw.)

0

Ich glaube, ich habe den Grund für diesen Shuffle gefunden. Zumindest in VS2008.

Wenn Sie die x64-Compiler installieren, werden VS bestellen Projekte wie:

Debug|Win32 
Debug|x64 
Release|Win32 
Release|x64 

Wenn Sie es nicht, wird sie gerne bestellen:

Debug|Win32 
Release|Win32 
Debug|x64 
Release|x64 

So stellen Sie sicher, dass alle Ihre Kollegen haben die Derselbe Compiler-Satz wurde installiert, sodass er nicht gemischt wird.

Getestet und dieses Verhalten scheint reproduzierbar zu sein.

Verwandte Themen