12

Microsoft Visual Studio使用XML保存其.vcproj項目文件。所以很容易區分XML項目文件應該在版本控制中維護Visual Studio vcproj項目文件的建議

不幸的是,如果您更改了任何項目文件的屬性,Visual Studio會堅持隨機洗滌項目文件的XML節點!這使得項目文件變更的文本差異和合並基本上是不可能的。更改一個編譯器設置可以使我的視覺差異工具認爲我已經改變了文件中50%的行數!我甚至嘗試了一些XML差異工具,但它們只是顯示了一個更加結構化的視圖。

有沒有人有任何建議在源代碼管理中維護.vcproj文件?或者一種方式來說服Visual Studio到而不是重新排列.vcproj文件中的XML節點?

(我一直在使用像CMake的工具來生成一個更差異友好的文本文件.vcproj文件還調查了,但CMake的有其自身的問題。)

回答

5

這似乎每時每刻都會出現。

也許是成熟的一個插件或其他工具正常化的問題。

這將是一個偉大的副業,直到MS決定解決它。然後你運氣不好 - 除非他們提供購買你的IP。

任何人想要啓動一個開源項目或商業產品?我是比賽。

我可能會去獨立的標準化工具,然後看看我是否可以把它變成一個插件。

+1

我想很容易編寫一個簡短的Python腳本來字母化一個.vcproj文件 XML節點。我發現WinMerge具有用於區分XML的插件;也許有人應該寫「vcproj alphabetizer」WinMerge插件?也許我會。 :) – 2009-03-04 21:51:03

2

我用的WinMerge作爲我的差異,工具和我啓用了移動塊檢測。它並沒有完全解決這個問題,但它讓可視化的差異變得更容易一點。

0

你看到了哪個版本的Visual Studio?

我用.vcproj文件做了很多工作(我們在多個Visual Studio版本中爲我們的庫維護項目文件的版本,而且我總是會區分和合並這些東西),但是我從未見過這種行爲。

+0

VS2008,但我聽說VS2005有同樣的問題。 「vcproj shuffle」隨機發生。我的項目有幾個(標題和來源)子文件夾。在瀏覽它們時,VS偶爾會重新排列GUI中的項目,並將它們隨機或按字母順序排序。這可能是相關的。 – 2009-03-05 04:55:18

+0

謝謝。我一定會留意這一點,如果我學到了可能有用的東西,我會在這裏發佈。 – 2009-04-07 19:45:38

0

我的Adobe團隊在vs2008中看到了同樣的情況。只是一個基本的調試/發佈,win32/win64項目給你4個配置和隨機洗牌。有幾個人試圖找出devstudio重新排序的時間和原因,但目前認爲排序關鍵字是關鍵字哈希 - 因此是半隨機的。我們已經放棄並在代碼評論中總結了「真實」的變化。

4

我們現在看到了這裏的工作文件,其中的配置在幾臺電腦上進行了重新排序,這是非常令人沮喪的...

* 注:我們都使用VS 2008專業版,而不是球隊

起初看起來他們是隨機重新排序,但其實也有一個模式,這是不是隨機在所有。

爲一組的配置是由平臺排序,然後按配置:

  • 調試|的Win32
  • 調試| 64
  • 發佈| Win32的
  • 發佈| 64
  • Debug DX11 | Win32
  • 調試DX11 | 64
  • 發佈DX11 |的Win32
  • 發佈DX11 | 64
  • ...

對於配置由配置命令其他組,然後通過平臺:

  • 調試|的Win32
  • 發佈| Win32的
  • 調試DX11 |的Win32
  • 發佈DX11 |的Win32
  • 調試| 64
  • 發佈| 64
  • 調試DX11 | 64
  • 發佈DX11 | 64
  • ...

通過查看歷史記錄,這與同一組人員提交的多個項目保持一致,並且大約有50/50的拆分,因此這不僅僅發生在一個人身上。

這是你所見到的同樣的問題嗎? 如果是這樣,我希望這種模式可以幫助找到一個不涉及宏/額外差異步驟的解決方案...

它必須是設置某處,或點擊某物的副作用,因爲它是100%每臺機器都可重複使用。即使它是你爲初始環境佈局(VC++,VB,一般開發等選擇的選項)愚蠢的東西...

0

我想我找到了這個洗牌的原因。至少在VS2008中。

如果您安裝了64位編譯器,VS將責令項目爲:

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

如果沒有它會命令他們想:

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

所以一定要確保所有的同齡人有安裝了相同的編譯器集合,所以它不會隨機播放。

經過測試,這種行爲似乎是可重複的。

相關問題