12

Microsoft Visual Studio utilizza XML per salvare i file di progetto .vcproj. File di progetto XML così diffusi dovrebbero essere facilmente.Suggerimenti per il mantenimento dei file di progetto vcproj di Visual Studio nel controllo di versione

Sfortunatamente, se si modifica una delle proprietà del file di progetto, Visual Studio insiste a mescolare in modo casuale i nodi XML del file di progetto! Ciò rende sostanzialmente impossibile la diffusione testuale e la fusione delle modifiche ai file di progetto. Cambiare le impostazioni di un compilatore può far sì che il mio strumento di visualizzazione visiva pensi di aver cambiato il 50% delle righe nel file! Ho anche provato alcuni strumenti di diff XML, ma mostrano solo una vista più strutturata dello stesso pasticcio.

Qualcuno ha qualche suggerimento per mantenere i file .vcproj nel controllo del codice sorgente? O un modo per convincere Visual Studio a non riorganizzare i nodi XML nel file .vcproj?

(ho anche studiato utilizzando strumenti come CMake per generare .vcproj file da un file di testo più diff-friendly, ma CMake ha i suoi problemi.)

risposta

5

Questo sembra emergere di tanto in tanto.

Forse è un problema maturo per un plug-in o altro strumento normalizzazione.

Sarebbe un grande affare, fino a quando MS deciderà di ripararlo. Allora sei sfortunato - a meno che, naturalmente, non offrano di comprare il tuo IP.

Chiunque desidera avviare un progetto open source o un prodotto commerciale? Sono un gioco.

Potrei provare uno strumento di normalizzazione autonomo, quindi vedere se riesco a trasformarlo in un plug-in.

+1

Immagino che sarebbe facile scrivere un breve script Python per alfabetizzare i file .vcproj Nodi XML. Vedo che WinMerge ha plugin per diffondere XML; forse qualcuno dovrebbe scrivere il plugin WinMerge "vcproj alphabetizer"? Forse lo farò. :) –

2

Io uso WinMerge come il mio diff-tool e ho attivato il rilevamento del blocco spostato. Non risolve il problema, ma rende la visualizzazione delle differenze un po 'più sopportabile.

0

In quale versione di Visual Studio vedi questo?

Lavoro molto con i file .vcproj (manteniamo versioni dei file di progetto per le nostre librerie in più versioni di Visual Studio, e sono sempre diffidente e unendo le cose) ma non ho mai visto questo comportamento .

+0

VS2008, ma ho sentito che VS2005 ha lo stesso problema. Il "vcproj shuffle" si verifica casualmente. I miei progetti hanno alcune sottocartelle (intestazioni e fonti). Durante la navigazione, VS occasionalmente riordina i progetti nella GUI, ordinandoli in ordine casuale o alfabetico. Questo potrebbe essere correlato. –

+0

Grazie. Certamente tengo d'occhio per questo, e se imparo qualcosa che possa aiutare, lo posterò qui. –

0

Il mio team in Adobe ha visto la stessa cosa in vs2008. Solo un semplice progetto Debug/Release, win32/win64 ti offre 4 configurazioni e casuale mescolamento. Diverse persone hanno cercato di capire quando e perché Devstudio riordina, ma il pensiero corrente è che la chiave di ordinamento è un hash di parole chiave - quindi semi-casuale. Abbiamo rinunciato e nelle revisioni del codice riassumiamo le modifiche "reali".

+1

Perché non creare un XSLT che riordina il file .vcproj secondo una sequenza standard. Fallo per entrambi i file che stai confrontando prima del tempo e confronti le mele con le mele. Ho fatto questo con i file .dtsx di SSIS, che cambiano se li fissi troppo a lungo. –

4

Stiamo vedendo questo qui al lavoro ora, con i file di progetto in cui le configurazioni sono riordinate su diversi computer di persone, ed è molto frustrante ...

* Nota: Tutti usiamo VS 2008 Pro, non la squadra

In un primo momento sembra che siano riordinati in modo casuale, ma c'è in realtà un modello e non è a caso a tutti .

Per un gruppo le configurazioni sono ordinate da Platform, poi da Config:

  • Debug | Win32
  • Debug | x64
  • Release | Win32
  • Release | x64
  • Debug DX11 | Win32
  • Debug DX11 | x64
  • uscita DX11 | Win32
  • uscita DX11 | x64
  • ...

Per l'altro gruppo le configurazioni sono ordinate per Config, poi da Piattaforma:

  • Debug | Win32
  • Release | Win32
  • 012.351.
  • Debug DX11 | Win32
  • DX11 Release | Win32
  • Debug | x64
  • Release | x64
  • Debug DX11 | x64
  • uscita DX11 | x64
  • ...

Guardando attraverso la cronologia delle perforazioni, questo è coerente con i progetti multipli presentati dagli stessi gruppi di persone, e c'è una suddivisione 50/50, quindi non sta succedendo solo per una persona.

È lo stesso problema che state vedendo tutti? Se è così, spero che questo modello aiuti a trovare una soluzione che non comporti un passo macro/extra ...

Deve essere un'impostazione da qualche parte, o un effetto collaterale di fare clic su qualcosa, poiché è al 100% riproducibile per ciascuna di queste macchine. Anche se è qualcosa di sciocco come l'opzione scelta per il layout dell'ambiente iniziale (VC++, VB, Sviluppo generale, ecc ...)

0

Penso di aver trovato il motivo per questo shuffle. Almeno in VS2008.

Se si installano i compilatori x64, VS ordinerà progetti come:

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

Se non che li Ordina per:

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

Quindi assicurarsi che tutti i vostri coetanei hanno la lo stesso set di compilatore installato, quindi non mescolerà.

Testato e questo comportamento sembra essere riproducibile.

Problemi correlati