2012-10-22 10 views
6

Ich erstelle ein Plugin für ein Produkt, das Plugin-DLLs mit Assembly.Load(byte[]) lädt. Das ist alles sehr gut und gut, aber es bedeutet, dass ich keine konventionellen Mittel habe, die Debugging-Symbole zu laden, um durch meinen Code zu gehen.Wie debuggen Sie eine Assembly, die über Assembly.Load (byte []) geladen wurde?

Das Verrückte ist, vor ein paar Monaten hatte ich genau das gleiche Problem und löste es - und Junge war ich stolz auf mich! So weiß ich, dass es getan werden kann, ich habe gerade vergessen, wie!

Ich habe ein paar vage Erinnerungen an Dinge, die ich habe versucht vielleicht, aber ich kann die Details aus meinem Kopf nicht necken:

  • .NET Reflector
    • Wahrscheinlich obwohl falsch, weil ich weiß noch genau, Datei
  • Verwenden des IIS Express statt Cassini den ursprünglichen CS- Schreiten durch
    • Aber das scheint mir ein Wehr d Lösung - Die Assembly wird von einem Byte-Array geladen, so dass das Framework nichts darüber weiß, woher die DLL stammt oder wie eine entsprechende PDB aussehen könnte, wenn sie eine solche sehen würde. Dieses Problem sollte in jeder Umgebung vorhanden sein.
  • die Symbole manuell über die "Module" Fenster Laden
    • versucht, diese; Ich bekomme "Die Symboldatei xxxxx.pdb passt nicht zum Modul" - weil wir natürlich von einem Byte-Array laden, nicht die DLL selbst.
+0

Wahrscheinlich haben Sie die Überladung Load (byte [], byte []) verwendet. –

+0

Ich würde gerne in der Lage sein, das zu tun, aber das Produkt ist Closed-Source. Ich weiß 'Assemly.Load (byte [])' wird verwendet, weil ich Reflector verwendet habe. Ich * könnte * sie bitten, 'byte [], byte []' zu verwenden und nach einer .pdb-Datei zu suchen, aber dann müsste ich warten, wer weiß, wie lange das nächste Release dauert (vorausgesetzt, es wird überhaupt genehmigt). Danke aber :) –

+0

Wird Ihre Assembly stark benannt? –

Antwort

1

Wenn Ihre Assembly stark benannt ist, können Sie die Assembly im GAC setzen. Stark benannte Baugruppen sind immer geladen von der GAC, auch wenn es über Assembly.Load(byte[]) geladen wird. Dann legen Sie einfach Ihre Symbole in C:\Windows\symbols\dll oder wo immer es bequem ist. Ich mache dies die ganze Zeit, um die Plugin-DLLs unseres eigenen Produkts zu debuggen, die auf ähnliche Weise von einer anderen Anwendung geladen werden.

Sie können gacutil verwenden, um es im GAC zu installieren. Denken Sie daran, es zu entfernen, wenn Sie mit dem Debuggen fertig sind, oder Sie könnten Tests gegen eine alte Version ausführen, die Sie vergessen und vergessen haben.