Frage

Ich habe eine VS (2008) Lösung mehrerer Projekte aus, die nicht alle im gleichen Namensraum. Wenn ich die Lösung bauen, alle DLLs von der Top-Level-Projekt TopProject werden kopiert in die TopProject \ bin \ debug Ordner verwendet. Allerdings sind die entsprechenden PDB-Dateien nur für einige der anderen Projekte kopiert. Dies ist ein Schmerz, zum Beispiel bei der Verwendung von NDepend .

Wie VS entscheiden, welche Dateien .pdb in höheren Ebene ist \ debug-Ordner zu kopieren? Wie kann ich VS die andere zu kopieren?


Edit:

Referenzen sind wie folgt: alle DLLs an eine zentrale Stelle kopiert werden, ohne ihre PDBS. TopProject nur Verweise auf diese kopiert dlls hat; die dlls selbst aber offenbar wissen, wo ihre PDBS sind, und (die meisten von ihnen) richtig an den Debug-Ordner kopiert werden.

War es hilfreich?

Lösung

MSDN :

  

Ein Programm Datenbank (PDB) Datei enthält   Debuggen und Projektstatus   Informationen, die inkrementale ermöglicht   Verknüpfung einer Debug-Konfiguration   Ihr Programm. Eine PDB-Datei erstellt   wenn Sie eine C / C ++ Programm kompiliert mit   / ZI oder / Zi oder ein Visual   Basic / C # / JScript .NET Programm mit   / Debug.

So ist es wie das „Problem“ sieht hier (in Ermangelung eines besseren Wortes) ist, dass einige Ihrer DLLs im Debug-Modus gebaut werden (und somit emittiert PDBs) und einige (daher im Release-Modus gebaut werden nicht Emittieren PDBs). Wenn das der Fall ist, sollte es einfach sein zu beheben - in jedes Projekt gehen und seine Build-Einstellungen aktualisieren. Dies wäre das Standardszenario sein, wenn Sie keine Zwicken der Kommandozeilenoptionen getan haben.

Allerdings wird es bekommen heikler, wenn das nicht der Fall ist. Vielleicht sind Sie alle in Release oder Debug-Modus. Nun müssen Sie die Befehlszeilen-Compiler-Optionen suchen (angegeben in den Projekteigenschaften) für jedes Projekt. Aktualisieren Sie sie / debug entsprechend, wenn Sie den Debugger wollen, oder es entfernen, wenn Sie dies nicht tun.

Bearbeiten in Reaktion auf Bearbeiten

Ja, der DLLs „wissen“, dass sie PDBs haben, und haben Wege zu ihnen, aber das bedeutet nicht, zu viel. Kopieren nur DLLs in einem bestimmten Verzeichnis, wie andere erwähnt haben, wird dieses Problem auf nicht löschen. Sie müssen auch die PDBs.

Kopieren einzelne Dateien in Windows, mit Ausnahme bestimmter „Bündel“ -Typ-Dateien (ich weiß nicht Microsofts Begriff für diese, aber „komplette HTML-Pakete“ sind das Konzept) nicht zugeordneten Dateien kopieren. DLLs sind nicht im „Bündel“ Art und Weise zusammengebaut, so dass hinter sie verlassen ihre PDB kopieren.

Ich würde sagen, die einzige Antwort, die Sie haben werden ist Ihren Prozess zu aktualisieren, um den DLLs zu diesen zentralen Stellen bekommen und nehmen Sie die PDBs ... Ich würde gerne auf dem falsch erwiesen, aber!

Andere Tipps

Wie andere Beiträge gesagt haben, können Sie einen Compiler / Korruption Problem.

Aber, wie Will sagte, wenn die PDB-Dateien erstellt werden, aber nicht angezeigt, wo Sie sie wollen, erstellen Sie einen Post-Build-Schritt. Hier ist der Post-Build-Schritt, den ich für jedes Projekt in meiner Lösung zu definieren. Es stellt sicher, dass alle Ausgabedateien in ein gemeinsames Verzeichnis kopiert werden.

Wenn Sie Ihre proj-Datei in \ SolutionDir \ ProjDir ist, dann ist die erste Zeile der Post-Build-Schritt wird die Ausgabedateien \ Lösung \ Bin \ Release oder \ Lösung \ Bin \ Debug kopieren. Die zweite Zeile kopiert die PDB-Datei, wenn dies ein Debug-Build. Ich kopiere nicht die PDB-Datei für Release baut.

Also, \ SolutionDir \ Bin enthält nun alle Ausgabedateien in einem Ort.

xcopy /r /y $(TargetPath) $(ProjectDir)..\$(OutDir)
if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\$(OutDir)

Zunächst einmal, nie etwas annehmen. Reinigen Sie die Lösung, es wieder aufzubauen im Debug-Modus, und prüfen Sie, ob alle PDB-Dateien erstellt werden. Wenn nicht, das ist Ihr Problem.

Wenn sie erstellt werden, und sie sind nicht alle kopiert zu werden, können Sie dieses Problem umgehen, indem ein Post Buildereignis erstellen, die manuell kopiert die PDB-Dateien an die gewünschten Stellen. Dies ist nur eine Behelfslösung, natürlich.

Das einzige, was ich denken kann, ist, dass Ihre Lösung Datei defekt ist. Sie können Ihre SLN als XML-Datei öffnen und den Inhalt untersuchen. Überprüfen Sie die Konfiguration für die Projekte, die erwartungsgemäß handeln und vergleichen sie mit denen, die es nicht sind. Wenn Sie nichts sehen, haben Sie diese auf Projektebene zu wiederholen. Vergleichen Sie arbeiten CSPROJ (oder was auch immer) Projektdateien und die Nicht-Arbeitenden.


Bearbeiten in Reaktion auf bearbeiten :

Wenn Sie nur manuell Material um das Kopieren, dann die PDBS manuell kopieren als auch. DLL sollte nicht „wissen“ etwas über PDBS, glaube ich. Just-Stick ‚em in das Zielverzeichnis und gehen eine Tasse Kaffee. Entspannen Sie sich.

Überprüfen Sie, wenn Sie die Lösung reinigen, dass es tatsächlich gereinigt wird. Ich habe VS Dateien führen gesehen um in bin \ debug hängen Verzeichnisse auch nach der Reinigung. Löschen Sie das bin \ Debug-Verzeichnis auf alle Ihre Projekte und wieder aufzubauen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top