9

Für Modularität bin ich zur Laufzeit auf eine DLL in meiner Lösung verlinken, anstatt kompilieren Zeit, um es mir zu ermöglichen, es unabhängig zu aktualisieren. Wenn ich Haltepunkte im Bibliotheksprojekt platziere, werden diese nicht ausgelöst, wenn die Klasse verknüpft ist, und ein Typ wird erstellt.Debuggen einer DLL zur Laufzeit verbunden

als Referenz, ist dies die Reflexion Code:

Assembly a = Assembly.LoadFile(FULL_APPLICATION_CACHE + targetVersion + "\\Core.dll"); 
Type engineCoreType = a.GetType("Core.EngineCore"); 
object instance = Activator.CreateInstance(engineCoreType); 

Ist es möglich, Visual Studio seiner normalen Debugging-Tools in diesem Szenario zu bieten? Wie würde ich das konfigurieren?

+0

Ein hilfreicher verwandter Beitrag [hier] (https://Stackoverflow.com/a/40524596/465053). – RBT

Antwort

8

Sie müssen sicherstellen, dass die PDB-Dateien an der gleichen Stelle wie die DLL sind, die Sie laden. Visual Studio lädt dann diese Daten und lässt sie an den Unterbrechungspunkten anhalten.

+0

Die pdb-Datei wird in dasselbe Verzeichnis kopiert, es werden jedoch immer noch keine Haltepunkte ausgelöst. Sie sind markiert als "Der Haltepunkt wird nicht getroffen. Für dieses Dokument wurden keine Symbole geladen". Danke für den Vorschlag obwohl – Venatu

+1

Scheint, dass sie dann nicht synchron sind ... – Jammer

+0

Sie waren richtig danke! Die Kopiermethode, die ich verwendete, überschrieb die vorherige Version nicht. – Venatu

10

Der Debugger muss in der Lage sein, die PDB-Datei für die Assembly zu finden. Sie können dies im Fenster Debugger + Windows + Module diagnostizieren. Klicken Sie mit der rechten Maustaste auf die DLL, und wählen Sie Symbol Load Information (Informationen zum Laden des Symbols). Dort wird angezeigt, wo der Debugger nach der PDB gesucht hat.

Beachten Sie, dass Sie nie Assembly.LoadFile() in diesem Szenario verwenden sollten, lädt es Baugruppen ohne einen Ladekontext. Ein teures Wort, das bedeutet, dass die CLR nicht darauf achtet, woher die DLL stammt und die DLL mehr als einmal laden kann. An sich eine Erklärung dafür, warum der Debugger den PDB nicht finden kann. Verwenden Sie stattdessen immer LoadFrom().

+0

Könnten Sie auf weitere Informationen über die Vorteile eines Kontext erweitern oder verlinken? Es ist nicht etwas, was ich vorher dachte, danke für den Rat – Venatu

+2

Es ist in jedem Zwischenbuch über .NET abgedeckt –

Verwandte Themen