2010-04-14 1 views
10

Ich migriere eine komplexe gemischte C++ /. NET-Lösung von VS2008 zu VS2010.VS2010 verbindet das Projekt immer wieder

Die aktualisierte Lösung funktioniert in VS2010, aber das Build-System ist immer Verweis auf eine C++/CLI-Assembly. Es wird nichts neu kompiliert, aber der Linker berührt die Datei. Das verursacht einen Welleneffekt stromabwärts in dem Build als Ganzes, der abhängig von dann wieder aufgebaut wird.

Irgendwelche Ideen, um herauszufinden, warum es denkt, es muss die Datei neu verknüpfen? Ich habe ausführliche Protokollierung aktiviert, aber nichts sticht heraus.

+0

Siehe auch: http://stackoverflow.com/questions/2762930/vs2010-always-thinks-project-is-out-of-date-but-nothing-has-changed für die gleiche Frage, die durch fehlende Dateien eher verursacht wird als eine PDB-Datei. – Ben

Antwort

7

Es stellte sich heraus, dass der PDB-Dateiname unter sowohl die Compiler-Einstellungen und die Linker-Einstellungen (mit dem gleichen Namen) definiert wurde.

Dies schien ein Problem in VS2010 zu verursachen, da irgendwie eine 'alte' pdb aus dem Zwischenverzeichnis (Compiler-Ausgabe?) Über die im Ausgabeverzeichnis kopiert wurde (Linker-Ausgabe?). Dies führte dazu, dass der pdb im Ausgabeverzeichnis älter als einige der obj-Dateien war und das erneute Verknüpfen beim nächsten Mal erzwang (spülen und wiederholen).

Das Löschen der pdb-Namenseinstellungen schien das Problem zu beheben, und die Standardeinstellungen waren in Ordnung.

+12

Könnten Sie mehr Details darüber enthalten, wo Sie die definierte pdb gesehen haben? Ich bin mir nicht sicher, über welche Compiler- oder Linkereinstellungen Sie sprechen, und ob Sie es von einem oder beiden gelöscht haben. –

0

Ich füge das nur für die Aufzeichnung, falls jemand anderes dieses Problem in der Zukunft bekommt.

Wir hatten ein ähnliches Problem mit einem großen, gemischten FORTRAN/C++ - Projekt, ob sich etwas geändert hat oder nicht. Es scheint damit zu beginnen, als die Lösung von VS2008 auf 2010 aktualisiert wurde, obwohl sich niemand daran erinnern konnte.

Schließlich nahm ich einen ernsthaften Blick (es war nervig, aber nicht genug, um etwas zu tun). Durch Eliminierungsprozess habe ich die Lösung gefunden:

Entfernen Sie alle Anführungszeichen in den "zusätzlichen Bibliotheksverzeichnisse" des Fortran-Projekts der obersten Ebene (d. H. Derjenige, der die ausführbare Datei erstellt).

Nun, ich würde nicht das selbst glauben, ohne Beweise, also, wenn Sie den Drang haben, um diesen Fehler zu reproduzieren sich selbst:

  1. Öffnen Sie eine neue VS2010-Sitzung.
  2. Erstellen Sie ein neues FORTRAN-Projekt, das eine ausführbare Datei erstellt.
  3. Lassen Sie es leer, aber verknüpfen Sie es mit einer nicht eingebauten Lib-Datei (d. H. Einer eigenen), und fügen Sie das Verzeichnis Ihrer Bibliothek den Zusätzlichen Bibliotheksverzeichnissen hinzu.
  4. Überprüfen Sie diese Kompilieren und Links richtig.
  5. Versuchen Sie jetzt doppelte Anführungszeichen (") um das Verzeichnis hinzuzufügen, und klicken Sie mehrmals auf" Erstellen ". Wenn Ihre Sitzung wie meine ist, wird sie jedes Mal neu verknüpft. Wenn Sie die Anführungszeichen entfernen, wird es gestoppt.

Dies scheint nur ein Problem auf dem Top-Level-Projekt zu sein, und wenn diese Projekte Fortran sind - die Anführungszeichen haben keinen Einfluss auf C++ Projekte oder solche, die libs erstellen

die Neuverknüpfung tritt nicht auf, wenn VS tut. Sie müssen nicht nach libs suchen (zum Beispiel, wenn alle Ihre Bibliotheken eingebaut sind, wie zB kernel32.lib), aber ob Ihre lib in dem Verzeichnis ist, das Anführungszeichen oder ein anderes enthält.

Wenn jemand diese "Funktion" rechtfertigen kann, lass es mich wissen!