2012-10-22 9 views
6

Sto creando un plug-in per un prodotto che carica DLL di plugin utilizzando Assembly.Load(byte[]). Questo è tutto molto bene e buono, ma significa che non ho mezzi convenzionali per caricare i simboli di debug per scorrere il mio codice.Come si esegue il debug di un assembly caricato tramite Assembly.Load (byte [])?

La cosa pazza è che diversi mesi fa stavo avendo lo stesso identico problema e l'ho risolto - e il ragazzo era orgoglioso di me stesso! Quindi so che si può fare, ho appena dimenticato come!

ho un paio di vaghi ricordi di cose che potrei ho provato, ma non riesco a prendere in giro i dettagli fuori di testa:

  • .NET Reflector
    • probabilmente sbagliato, però, perché mi ricordo distintamente passando attraverso le cs file originale
  • Utilizzando IIS espresso piuttosto che Cassini
    • Ma questa mi sembra una diga d soluzione: l'assembly viene caricato da un array di byte, quindi il framework non sa da dove viene la DLL o quale potrebbe essere un PDB appropriato se ne vedeva uno. Questo problema dovrebbe esistere in qualsiasi ambiente.
  • Caricamento simboli manualmente attraverso la finestra "moduli"
    • provato questo; Ottengo "Il file di simboli xxxxx.pdb non corrisponde al modulo" - perché, naturalmente, stiamo caricando da un array di byte, non dalla DLL stessa.
+0

Probabilmente si è utilizzato il sovraccarico Load (byte [], byte []). –

+0

Mi piacerebbe poterlo fare, ma il prodotto è closed-source. So che 'Assemly.Load (byte []) 'è in uso perché ho usato Reflector. Potrei * chiedere loro di usare 'byte [], byte []' e controllare un file .pdb, ma poi dovrei aspettare chissà quanto a lungo per la prossima versione (supponendo che venga approvata del tutto). Grazie però :) –

+0

Il tuo gruppo ha un nome forte? –

risposta

1

Se il montaggio è un nome sicuro, è possibile inserire l'assembly nella Global Assembly Cache. Gli assembly con un nome forte sono sempre caricato dal GAC, anche se viene caricato tramite Assembly.Load(byte[]). Quindi basta inserire i simboli in in C:\Windows\symbols\dll o dove mai è conveniente. Lo faccio sempre per eseguire il debug delle DLL di plugin del nostro prodotto che vengono caricate da un'altra applicazione in modo simile.

È possibile utilizzare gacutil per installarlo nel GAC. Ricordati di rimuoverlo quando hai finito il debug o potresti finire di eseguire test su una vecchia versione che avevi già dimenticato e dimenticato.

Problemi correlati