2016-06-13 21 views
5

Używam Roslyn do dynamicznej kompilacji dowolnych plików *.cs. Jestem w stanie wygenerować DLLs i PDBs i wykonać metody w załadowanych złożeniach za pomocą odbicia, ale gdy dołączam debugger VS z System.Diagnostics.Debugger.Launch(), otrzymuję błędy "źródło niedostępne". Okno "Moduły" w VS pokazuje, że symbole zostały pomyślnie załadowane. Źródło, o którym mowa, żyje w projekcie w ramach tego samego rozwiązania, ale nie jest kompilowane do czasu wykonania.Debugowanie dynamicznie skompilowanego kodu za pomocą Roslyn

Czy ktoś z powodzeniem uzyskał to działa? Dzięki!

reprodukcji: https://gist.github.com/toraora/a9d4eb8679383fe659da04d3be5c2d6e (będę znosić rzeczywiste rozwiązanie, kiedy zakończyć konfigurację kluczy SSH na tej maszynie)

+0

Czy mógłbyś opublikować minimalny przykład, aby odtworzyć problem? Pewnie, mógłbym napisać to sam, ale jestem leniwy :-) –

+1

reprodukcja wysłana! –

+4

Problem jest łatwy do wykrycia: twoje jedyne użycie 'srcfile' znajduje się w' File.ReadAllText'. Ponieważ nie podajesz Roslyn w żaden sposób, aby wiedzieć, co to jest plik źródłowy, nie ma możliwości, aby Roslyn mógł wygenerować informacje debugowania, które umożliwiają znalezienie tego pliku źródłowego. Rozwiązanie nie jest jednak tak oczywiste dla kogoś, kto nie jest zbyt zaznajomiony z interfejsami API Roslyn. – hvd

Odpowiedz

4

Ach, więc rozwiązaniem było mieć:

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

Thanks @hvd!

Powiązane problemy