2016-06-13 10 views
5

Ich verwende Roslyn, um beliebige *.cs Dateien dynamisch kompilieren. Ich bin in der Lage, die DLLs und PDBs generieren und Methoden innerhalb der geladenen Assemblys über Reflektion ausführen, aber wenn ich den VS-Debugger von System.Diagnostics.Debugger.Launch() anfügen, bekomme ich "Quelle nicht verfügbar" Fehler. Das Fenster 'Module' in VS zeigt an, dass die Symbole erfolgreich geladen wurden. Die betreffende Quelle lebt in einem Projekt unter derselben Lösung, wird jedoch erst zur Laufzeit kompiliert.Debugging dynamisch kompilierten Code mit Roslyn

Hat jemand erfolgreich das funktioniert? Vielen Dank!

Fortpflanzung: https://gist.github.com/toraora/a9d4eb8679383fe659da04d3be5c2d6e (Ich werde die tatsächliche Lösung setzen, wenn ich SSH-Schlüssel auf dieser Maschine abgeschlossen hat)

+0

Würde es Ihnen etwas ausmachen, ein minimales Beispiel zu veröffentlichen, um das Problem zu reproduzieren? Klar, ich könnte es selber schreiben, aber ich bin faul :-) –

+1

reproduktion gepostet! –

+4

Das Problem ist leicht zu erkennen: Ihre einzige Verwendung von 'srcfile' ist in' File.ReadAllText'. Da Sie Roslyn keine Möglichkeit geben zu wissen, was die Quelldatei ist, gibt es keine Möglichkeit, dass Roslyn Debug-Informationen generieren kann, die es ermöglichen, dass die Quelldatei gefunden wird. Die Lösung ist für jemanden, der mit Roslyns APIs nicht so vertraut ist, nicht so offensichtlich. – hvd

Antwort

4

Ach, so war die Lösung zu haben:

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

Dank @hvd!