2010-04-14 13 views
10

Sto migrando una soluzione mista complessa C++ /. NET da VS2008 a VS2010.VS2010 ricollega sempre il progetto

La soluzione aggiornata funziona in VS2010, ma il sistema di creazione è sempre riferimento a un assembly C++/CLI. Non ricompila nulla, ma il linker tocca il file. Le cause di un effetto a catena a valle nella build come un intero gruppo di dipendenti vengono quindi ricostruite.

Qualche idea su come scoprire perché pensa di dover ricollegare il file? Ho attivato la registrazione dettagliata della compilazione, ma nulla si distingue.

+0

Vedere anche: http://stackoverflow.com/questions/2762930/vs2010-always-thinks-project-is-out-of-date-but-nothing-has-changed per la stessa domanda causata da file mancanti piuttosto di un file PDB. – Ben

risposta

7

Risulta il problema era che il nome file PDB è stato definito in sia le impostazioni del compilatore e le impostazioni del linker (con lo stesso nome).

questo sembrava causare un problema in VS2010 come in qualche modo un PDB 'vecchio' dalla directory intermedia (l'output del compilatore?) È stata la copia su quella nella directory di output (uscita linker?). Ciò ha portato il pdb nella directory di output ad essere più vecchio di alcuni dei file obj e forzare il ricollegamento la prossima volta (risciacquo e ripetizione).

Cancellare le impostazioni del nome del pdb sembrava risolvere il problema e le impostazioni predefinite andavano bene.

+12

Potresti includere maggiori dettagli su dove hai visto il pdb definito? Non sono sicuro di quali impostazioni del compilatore o del linker stai parlando e se lo hai eliminato da uno o entrambi. –

0

Sto solo aggiungendo questo per il record, nel caso in cui qualcun altro dovesse avere questo problema in futuro.

Abbiamo avuto un problema simile con un progetto FORTRAN/C++ di grandi dimensioni misto che ricollegava se qualcosa era cambiato. Sembra che sia iniziato quando la soluzione è stata aggiornata da VS2008 al 2010, anche se nessuno potrebbe ricordarlo.

Alla fine, ho dato un'occhiata seria (era fastidioso, ma non abbastanza per fare qualsiasi cosa). Dal processo di eliminazione, ho trovato la soluzione:

Rimuovere eventuali citazioni in "Directories libreria aggiuntiva" del progetto FORTRAN di primo livello (cioè quello che fa l'eseguibile).

Ora, io non credo che questo me stesso senza prove, quindi se si ha la voglia di riprodurre questo errore da soli:

  1. Aprire una nuova sessione di VS2010.
  2. Creare un nuovo progetto FORTRAN che rende un eseguibile.
  3. Lascia vuoto, ma collegalo a un file lib non incorporato (ad esempio uno dei tuoi) e aggiungi la directory della libreria alle Directory della libreria aggiuntive.
  4. Controllare questo compila e collega correttamente.
  5. Ora provare l'aggiunta di doppie virgolette (") intorno alla directory e fare clic su 'Build' più volte. Se la sessione è come il mio, allora sarà ricollegare ogni volta. Quando si rimuove le virgolette, si ferma.

Questo sembra essere solo un problema sul progetto di primo livello, e quando questi siano FORTRAN - le quotazioni non hanno alcun effetto su C progetti ++ o quelli che creano librerie

il ricollegamento non si verifica se VS fa. non c'è bisogno di cercare libs (per esempio, se tutte le tue librerie sono integrate, come kernel32.lib), ma si verificherà se la tua lib è o meno nella directory che ha citazioni o una diversa.

Se qualcuno può giustificare questa "funzione", fatemelo sapere!

Problemi correlati