2010-11-16 14 views
14

Io lavoro in una squadra su un progetto di Visual C++. Seguendo advice abbiamo ottenuto il tracciamento del file .sln del progetto con il nostro SCM. Si scopre che ogni volta che tiro dal mio partner (sì, usiamo git) e apro la soluzione in VS, il file .sln viene aggiornato. La parte in corso di aggiornamento è la lunga id che compare più volte (in questo caso termina con 7C44) nel seguente segmento:Visual Studio continua a cambiare il file project.sln

{828CB89E-F092-3B7A-2F8C-62E146587C44}.Debug|Win32.ActiveCfg = Debug|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Debug|Win32.Build.0 = Debug|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.DebugStaticCRT|Win32.ActiveCfg = DebugStaticCRT|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.DebugStaticCRT|Win32.Build.0 = DebugStaticCRT|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Release|Win32.ActiveCfg = Release|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Release|Win32.Build.0 = Release|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.ReleaseStaticCRT|Win32.ActiveCfg = ReleaseStaticCRT|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.ReleaseStaticCRT|Win32.Build.0 = ReleaseStaticCRT|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Template|Win32.ActiveCfg = Template|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Template|Win32.Build.0 = Template|Win32 

Che cosa significa questo numero? Come possiamo impedirci di cambiare tra di noi?

+0

Il numero è un GUID, che sto indovinando è usato per rappresentare un determinato progetto all'interno della soluzione. –

+1

Sì, la domanda è: perché il GUID cambia ogni volta? – Arafangion

+0

Il GUID (identificatore grande) viene utilizzato per identificare il progetto in un modo univoco. Esiste un altro progetto con lo stesso GUID nella soluzione? –

risposta

9

Questo è un GUID che Visual Studio utilizza per fare riferimento ai singoli progetti. Troverai lo stesso GUID nella parte superiore del file .sln, dove i progetti sono definiti/importati.

Visual Studio legge il GUID dal file/.vbproj corrispondente .csproj. Lì dovresti trovare una proprietà ProjectGuid nella parte superiore con il GUID corrispondente. Se tu e il tuo partner avete definito un GUID diverso, anche lo .sln si aggiornerà.

+0

Quindi uno di noi può modificare manualmente il file .csproj /.file vbproj e modificare il GUID per adattarsi agli altri? – Jonathan

+0

@ Jonathan Sì, potresti. Inoltre, il file dovrebbe essere comunque in controllo della versione. –

+3

Sto vedendo lo stesso problema ma questo non sembra applicarsi a me. Ho apportato modifiche al mio file .vcxproj e .sln e ho controllato tutti i file. Ho provato a testarlo scaricando il progetto completo in una nuova posizione. Nella nuova posizione il GUID viene modificato quando apro il file di soluzione e il progetto è un disastro! Sto ancora cercando di capire come risolvere questo problema. Sto usando VS2010 – zar

5

Ho avuto lo stesso problema. finalmente ho notato è venuto da un file vcxproj che non definiscono il suo GUID. Ho aggiunto manualmente questo GUID nel mio file vcxproj:

<PropertyGroup Label="Globals"> 
    <ProjectGuid>{D3303AD3-B7E5-48F8-919C-18202ABAEF00}</ProjectGuid> 
    <RootNamespace>MyProject</RootNamespace> 
    <ProjectName>MyProject</ProjectName> 
    <Keyword>MFCProj</Keyword> 
    </PropertyGroup> 
27

ho avuto un momento difficile trovare questo particolare messaggio durante la ricerca per la risposta, quindi volevo solo aggiungere alcune parole chiave e spiegazioni per rendere più facile trovare . Grazie alle fantastiche risposte di Daniel e tgb sono stato in grado di risolvere questo problema e il mio team e io non abbiamo più file di soluzione in conflitto dopo l'apertura di Visual Studio 2010 (voterei le loro risposte, ma mi sono appena iscritto oggi e non ho ancora abbastanza punti reputazione per votare risposte ...).

Così, per fare la domanda in un paio di modi: Perché Visual Studio modificare i file .sln quando si apre una soluzione? Perché i file .sln hanno modifiche locali? o Che cosa provoca i conflitti di fusione file di Visual Studio soluzione?

Risposta: molto probabilmente un attributo ProjectGuid diverso o mancante nel file di progetto .vcxproj causerà modifiche locali. Ciò potrebbe essere dovuto all'aggiornamento di progetti da versioni precedenti di Visual Studio o semplicemente dalla copia manuale di un file di progetto e dalla modifica di parti di esso.

La correzione è quello di aggiungere la riga:

<ProjectGuid>{###}</ProjectGuid> 

(con l'ID appropriato dal file di soluzione al posto di ###) al file .vcxproj nella 'PropertyGroup Label = "Globali"' nodo, per esempio:

<PropertyGroup Label="Globals"> 
    <ProjectGuid>{FD0675C0-EC06-E665-4001-12DEE6694605}</ProjectGuid> 
    <RootNamespace>MyProject</RootNamespace> 
    </PropertyGroup> 

Altrimenti Visual Studio sarà solo assegnare un nuovo ProjectGuid casuale per ogni progetto e aggiornare il file sln. Il 'ProjectGuid' può essere facilmente trovato in un determinato progetto nel file .sln:

Project("{<Filter#>}") = "MyProjName", "src\to\Proj.vcxproj", "{<ProjectGuid>}" 
+4

Aggiungo anche che un possibile motivo per cui manca un attributo '' sta convertendo il progetto da uno VC6. – ceztko