2016-06-13 38 views
5

Sto utilizzando Roslyn per compilare in modo dinamico file arbitrari *.cs. Sono in grado di generare il DLLs e PDBs ed eseguire i metodi all'interno degli assembly caricati tramite riflessione, ma quando si collega il debugger VS da System.Diagnostics.Debugger.Launch(), ricevo errori di "origine non disponibile". La finestra 'Modules' in VS mostra che i simboli sono stati caricati con successo. La fonte in questione vive in un progetto con la stessa soluzione, ma non è compilata fino al runtime.Codice di debug compilato in modo dinamico con Roslyn

Qualcuno ha funzionato correttamente? Grazie!

riproduzione: https://gist.github.com/toraora/a9d4eb8679383fe659da04d3be5c2d6e (Metterò la soluzione reale quando finisco la creazione di chiavi SSH su questa macchina)

+0

Ti dispiacerebbe postare un esempio minimo per riprodurre il problema? Certo, potrei scriverlo da solo, ma sono pigro :-) –

+1

riproduzione postata! –

+4

Il problema è facile da individuare: il tuo unico uso di 'srcfile' è in' File.ReadAllText'. Dato che non si fornisce a Roslyn alcun modo per sapere quale sia il file sorgente, Roslyn non può in alcun modo generare informazioni di debug che consentano di trovare quel file sorgente. La soluzione non è così ovvia per qualcuno che non ha familiarità con le API di Roslyn. – hvd

risposta

4

Ah, quindi la soluzione era quella di avere:

CSharpSyntaxTree.ParseText(File.ReadAllText(srcfile), path: srcfile, encoding: System.Text.Encoding.UTF8)

Grazie @hvd!