Ich habe zwei Lösungen in meinem Arbeitsbereich, z. B. A und B.
Lösung A ist ein älteres Projekt, das ich vor einiger Zeit fertig codiert habe. In Lösung B muss ich einige Klassen aus Lösung A verwenden. Dazu füge ich einen Verweis auf die DLL eines der Projekte in Lösung A hinzu.
Das Problem ist, wenn ich versuche zu debuggen. Ich möchte auch in den Code von A eintreten können. Visual Studio kann den Code für diese Klassen nicht laden ("Für den aktuellen Speicherort ist kein Quellcode verfügbar.") Und ich kann nur die Demontage anzeigen, was nicht hilfreich ist.
Die einzige Möglichkeit, Klassen aus Lösung A zu debuggen, besteht darin, Lösung B auszuführen, alle Prozesse zu trennen (im Menüpunkt Debuggen) und den Prozess aus Lösung A anzuhängen.
Dies ist jedoch sehr unpraktisch und ich kann A ODER B nur auf einmal debuggen.
Gibt es eine Möglichkeit, in den Code der referenzierten DLLs einzusteigen (für die ich den Quellcode habe)?
Lösung: Mein Fehler war, dass ich dachte, dass ein Projekt nur Teil einer einzigen Lösung sein kann. Tatsächlich kann ein Projekt Teil einer beliebigen Anzahl von Lösungen sein.
Wenn Sie auf das alte Projekt verweisen müssen, sollten Sie das Projekt einfach zur Lösung hinzufügen. Klicken Sie dazu mit der rechten Maustaste auf die neue Lösung im Projektmappen-Explorer> Hinzufügen> Vorhandenes Projekt.
Anschließend können Sie die Projektreferenz hinzufügen. Wie andere geschrieben haben, sollten Sie wahrscheinlich die Verwendung von DLL-Verweisen auf Ihren eigenen Code (oder anderen Code, den Sie möglicherweise ändern und debuggen müssen) vollständig vermeiden.
Eine sehr gute Referenz zum Entwerfen von Lösungen finden Sie in MSDN .
Antworten:
Wenn Sie eine Projektreferenz haben , sollte diese sofort funktionieren.
Wenn es sich um eine Datei (DLL) Referenz, müssen Sie die Debug - Symbole (die „PDB“ Datei) im selben Ordner wie die dll sein. Überprüfen Sie, ob Ihre Projekte Debug-Symbole generieren (Projekteigenschaften => Build => Erweitert => Ausgabe / Debug-Info = voll). und wenn Sie die DLL kopiert haben , legen Sie die pdb damit.
Sie können Symbole auch direkt in die IDE laden, wenn Sie keine Dateien kopieren möchten, dies ist jedoch mehr Arbeit.
Am einfachsten ist es, Projektreferenzen zu verwenden!
quelle
Ich hatte das gleiche Problem. Er ist das, was ich gefunden habe:
1) Stellen Sie sicher, dass alle Projekte dasselbe Framework verwenden (dies ist entscheidend!)
2) Stellen Sie unter Extras / Optionen> Debuggen> Allgemein sicher, dass "Nur meinen Code aktivieren (nur verwaltet) NICHT aktiviert ist
3) Löschen Sie unter Extras / Optionen> Debuggen> Symbole alle zwischengespeicherten Symbole, deaktivieren und löschen Sie alle Ordnerpositionen im Listenfeld "Speicherorte der Symboldatei (.pdb)" mit Ausnahme des Standardfelds "Microsoft Symbol Server", deaktivieren Sie sie jedoch weiterhin. Löschen Sie auch alle statischen Pfade im Textfeld "Cache-Symbole in diesem Verzeichnis". Klicken Sie auf die Schaltfläche "Cache für leere Symbole". Stellen Sie schließlich sicher, dass das Optionsfeld "Nur angegebene Module" aktiviert ist.
4) Stellen Sie im Menü Build / Configuration Manager für alle Projekte sicher, dass sich die Konfiguration im Debug-Modus befindet.
quelle
Beachten Sie auch, dass die referenzierten DLLs nicht im GAC installiert sind. Nach dem Testen habe ich meine DLLs im GAC installiert, um Tests auf Systemebene durchzuführen. Später, als ich meinen Code erneut debuggen musste, konnte ich nicht auf die Assemblys zugreifen, auf die verwiesen wurde, bis ich sie aus dem GAC gelöscht hatte.
quelle
Schritt 1: Gehen Sie zu Extras -> Option -> Debuggen
Schritt 2: Deaktivieren Sie Nur meinen Code aktivieren
Schritt 3: Deaktivieren Sie die Option Quelldatei genau mit Originalversion übereinstimmen
Schritt 4: Deaktivieren Sie Schritt über Eigenschaften und Operatoren
quelle
Ich hatte die
*.pdb
Dateien im selben Ordner und verwendete die Optionen von Arindam , aber es funktionierte immer noch nicht. Es stellte sich heraus, dass ich das Debuggen von nativem Code aktivieren musste , das unter Projekteigenschaften> Debuggen zu finden ist .quelle
Wenn Sie einen Haltepunkt im Quellcode einer referenzierten DLL festlegen möchten, stellen Sie zunächst sicher, dass eine PDF-Datei dafür verfügbar ist. Dann können Sie einfach die zugehörige Quellcodedatei öffnen und dort einen Haltepunkt setzen. Die Quelldatei muss nicht Teil Ihrer Lösung sein. Wie unter Wie kann ich in Visual Studio einen Haltepunkt in referenziertem Code festlegen?
Sie können Ihre Haltepunkte über das Fenster Haltepunkte überprüfen, das über Debug -> Windows -> Haltepunkte verfügbar ist.
Dieser Ansatz hat den Vorteil, dass Sie Ihrer Lösung kein vorhandenes Projekt nur zu Debugging-Zwecken hinzufügen müssen, da ich durch das Weglassen viel Zeit beim Erstellen gespart habe. Offensichtlich ist das Erstellen einer Lösung mit nur einem Projekt viel schneller als das Erstellen einer Lösung mit vielen davon.
quelle
Stellen Sie sicher, dass Ihre DLL nicht im GAC registriert ist. Visual Studio verwendet die Version im GAC und enthält wahrscheinlich keine Debugging-Informationen.
quelle
Ich möchte kein externes Klassenbibliotheksprojekt in einige meiner Lösungen aufnehmen, daher gehe ich in Assemblys, die ich auf andere Weise verwende.
Meine Lösungen haben ein "Common Assemblies" -Verzeichnis, das meine eigenen DLLs aus anderen Projekten enthält. Die DLLs, auf die ich verweise, haben auch die zugehörigen PDB-Dateien zum Debuggen.
Zum Debuggen und Festlegen von Haltepunkten habe ich einen Haltepunkt in der Quelle der konsumierenden Anwendung festgelegt, an dem ich eine Methode oder einen Konstruktor aus der Assembly aufrufe, und dann den Methoden- / Konstruktoraufruf INTO (F11) ausgeführt.
Der Debugger lädt die Quelldatei der Assembly in VS, und an diesem Punkt können neue Haltepunkte innerhalb der Assembly festgelegt werden.
Dies ist nicht einfach, funktioniert jedoch, wenn Sie keine neue Projektreferenz einfügen und stattdessen einfach auf eine gemeinsam genutzte Assembly verweisen möchten.
quelle
Es muss funktionieren. Ich habe gleichzeitig eine EXE-Datei und eine DLL debuggt! Was ich vorschlage, ist 1) Fügen Sie den Pfad der DLL in Ihr B-Projekt ein, 2) Kompilieren Sie dann beim Debuggen Ihres A-Projekts 3) Kontrollieren Sie, dass der Pfad auf die A-DLL- und De-PDF-Datei zeigt .... 4) Danach Sie Starten Sie das Debuggen des B-Projekts und wenn alles in Ordnung ist, können Sie in beiden Projekten debuggen!
quelle
Die einfachste Möglichkeit, mit VisualStudio 2019 eine externe Bibliothek zu debuggen, auf die Sie in NuGet verweisen, besteht darin, die folgenden Schritte auszuführen:
Extras> Optionen> Debuggen> Allgemein> Deaktivieren Sie "Nur meinen Code aktivieren".
Gehen Sie zu Assembly Explorer> Aus NuGet Packages Cache öffnen
Geben Sie den Namen des NuGet-Pakets, das Sie debuggen möchten, in das Suchfeld ein und klicken Sie auf "OK".
Klicken Sie im Assembly Explorer mit der rechten Maustaste auf die importierte Assembly und wählen Sie "Pdb generieren".
Wählen Sie einen benutzerdefinierten Pfad aus, in dem Sie die PDF-Datei und das Framework speichern möchten, für das dies generiert werden soll
Kopieren Sie die PDF-Datei aus dem generierten Ordner in Ihren Debug-Ordner, und Sie können jetzt Haltepunkte für den Bibliothekscode dieser Assembly festlegen
quelle