9

Per modularità, sto collegando una DLL alla mia soluzione in fase di esecuzione piuttosto che compilare il tempo per consentirmi di aggiornarlo in modo indipendente. Quando inserisco i breakpoint nel progetto della libreria, questi non vengono attivati ​​quando la classe è collegata e viene creato un tipo.Debug di una dll collegata a runtime

Per avere un riferimento, questo è il codice di riflessione:

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

E 'possibile per Visual Studio per offrire ai suoi normali strumenti di debug in questo scenario? Come dovrei configurarlo?

+0

Un utile post correlato [qui] (https://stackoverflow.com/a/40524596/465053). – RBT

risposta

8

È necessario assicurarsi che i file .pdb si trovino nella stessa posizione della DLL che si sta caricando. Visual Studio caricherà quindi tali dati e gli consentiranno di fermarsi ai punti di interruzione.

+0

Il file pdb viene copiato nella stessa directory, ma non attiva ancora i breakpoint. Sono contrassegnati come "Il punto di interruzione non verrà colpito. Nessun simbolo è stato caricato per questo documento". Grazie per il suggerimento però – Venatu

+1

Sembra che siano fuori sincrono ... – Jammer

+0

Hai avuto ragione, grazie! Il metodo di copia che ho usato non ha sovrascritto la versione precedente. – Venatu

10

Il debugger deve essere in grado di trovare il file .pdb per l'assembly. Puoi diagnosticare questo dalla finestra Debugger + Windows + Modules. Fare clic con il tasto destro del mouse sulla DLL e selezionare Symbol Load Information, mostra dove il debugger ha cercato il PDB.

Si noti che è necessario mai utilizzare Assembly.LoadFile() in questo scenario, carica gli assembly senza un contesto di caricamento. Una parola costosa che significa che CLR non presta attenzione a dove proviene la DLL e consente di caricare la DLL più di una volta. Di per sé una spiegazione del motivo per cui il debugger non riesce a trovare il PDB. Usa sempre LoadFrom().

+0

Potresti ampliare o collegarmi a maggiori informazioni sui vantaggi di avere un contesto? Non è qualcosa che ho considerato prima, grazie per il consiglio – Venatu

+2

È coperto in qualsiasi libro di intermediazione su. NET –

Problemi correlati