12

Microsoft Visual StudioはXMLを使用して.vcprojプロジェクトファイルを保存します。 XMLプロジェクトファイルを比較すると、は簡単にになります。バージョン管理でVisual Studio vcprojプロジェクトファイルを維持するための提案

残念ながら、プロジェクトファイルのプロパティを変更すると、Visual StudioはプロジェクトファイルのXMLノードをランダムにシャッフルします。これは、テキストのdiffingとプロジェクトファイルの変更のマージを基本的に不可能にします。 1つのコンパイラ設定を変更すると、私の視覚的なdiffツールはファイル内の行の50%を変更したと考えることができます!私はいくつかのXML diffツールを試してみましたが、同じ混乱のより構造的なビューを示しています。

.vcprojファイルをソース管理に維持するための提案がありますか?またはVisual Studioをに設定しないとファイルのXMLノードが.vcprojファイルに再配置されませんか?

(私はまた、より多くの差分に優しいテキストファイルから.vcprojファイルを生成するためにCMakeのようなツールを使用して調査しているが、CMakeのは、独自の問題を抱えている。)

答えて

5

これは今やっているようです。

おそらくそれは、プラグインまたは他の正規化ツールのために熟した問題です。

MSがそれを修正することを決定するまで、それは素晴らしいビジネスです。もちろん、彼らはあなたのIPを買うことを奨励しない限り、運が悪いです。

誰かがオープンソースプロジェクト、または市販の製品を使いたいですか?私はゲームです。

スタンドアロンの正規化ツールを使用してプラグインに変換できるかどうかを確認することができます。

+1

私は、.vcprojファイル XMLノードをアルファベット順に並べ替えるための簡単なPythonスクリプトを書くのは簡単でしょう。私は、WinMergeにはXMLをdiffingするためのプラグインがあることがわかります。おそらく誰かが "vcprojアルファベット" WinMergeプラグインを書く必要がありますか?多分私はそうするでしょう。 :) –

2

私は私の差分ツールとしてWinMergeのを使用して、私が有効になって移動ブロック検出。それは問題をかなり修正するものではありませんが、違いを視覚化することはもう少し簡単です。

0

どのバージョンのVisual Studioでこれを見ていますか?

私は、.vcprojファイルで多くの作業を行います(私たちは複数のVisual Studioバージョンで私たちのライブラリ用のプロジェクトファイルのバージョンを管理していますが、私は常にそれを比較してマージしています) 。

+0

VS2008、しかし私はVS2005が同じ問題を抱えていると聞いた。 「vcprojシャッフル」はランダムに発生します。私のプロジェクトにはいくつかの(ヘッダーとソース)サブフォルダがあります。それらをナビゲートするとき、VSはGUIでプロジェクトを並べ替えることがあり、ランダムまたはアルファベット順でソートします。それは関連しているかもしれません。 –

+0

ありがとうございます。私は確かにこれに注意を払っていきます。私が助けてくれるものを学ぶなら、ここに投稿します。 –

0

アドビの私のチームはvs2008でも同じことを見てきました。基本的なDebug/Releaseのwin32/win64プロジェクトは、4つの設定とランダムなシャッフルを提供します。何人かの人々がdevstudioがいつ、そしてなぜ再配列するかを調べようとしましたが、現在の考えはソートキーがキーワードハッシュなので半ランダムです。私たちはあきらめて、コードのレビューでは「本当の」変化を要約するだけです。

+1

標準シーケンスに従って.vcprojファイルの順序を変更するXSLTを作成しないでください。前もって比較している両方のファイルに対してこれを行い、あなたはリンゴとリンゴを比較します。私はこれをSSISの.dtsxファイルで行いました。あなたがあまりにも長い間それを見つめていると変更されます。 –

4

私たちは現在、ここで仕事をしています。プロジェクトファイルには、いくつかの国のコンピュータで設定が並べ替えられているので、非常にイライラしています...

* 注:我々は、すべてのVS 2008 Proは、最初に

をチームではない、彼らはランダムに並べ替えているように見えるが、そこパターンが実際にあり、それは全くのランダムではありませんを使用します。一つのグループの構成が、その後コンフィグにより、プラットフォームによって順序付けられているために

  • デバッグ| Win32の
  • デバッグ| x64の
  • リリース| Win32の
  • リリース| x64の
  • デバッグDX11 | Win32
  • デバッグDX11 | x64の
  • リリースDX11 | Win32の
  • リリースDX11 |その後、プラットフォーム別の構成はコンフィグによって順序付けされている他のグループのためにx64の
  • ...

、:

  • デバッグ| Win32の
  • リリース| Win32の
  • デバッグDX11 | Win32の
  • リリースDX11 | Win32の
  • デバッグ| x64の
  • リリース| x64の
  • デバッグDX11 | x64の
  • リリースDX11 | x64の
  • ...

PERFORCEの歴史を見てみると、これは同じ人たちによって提出された複数のプロジェクトと一致しており、約50/50に分割されているため、1人で起こるだけではありません。

これはあなたが見ているのと同じ問題ですか? もしこのパターンが、マクロ/余分なdiffステップを含まない解決策を見つけるのに役立ちたいと思っています。

何かをクリックすると100%これらのマシンごとに再現可能です。もしあなたがあなたの初期の環境レイアウト(VC++、VB、General Development、など)にどのようなオプションを選んだとしても、愚かなものであっても、

0

私はこのシャッフルの理由を見つけたと思います。少なくともVS2008では。

あなたはx64のコンパイラをインストールした場合、VSのようにプロジェクトを発注します:あなたはそれは彼らが好きで注文しますしない場合は

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

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

だから、すべてのピアが持っていることを確認してください同じコンパイラセットがインストールされているので、シャッフルしません。

これをテストしたところ、この現象は再現可能であるようです。

関連する問題