2016-06-13 55 views
5

我使用Roslyn来动态编译任意*.cs文件。我能够生成DLLsPDBs并通过反射在加载的程序集中执行方法,但是当从System.Diagnostics.Debugger.Launch()附加VS调试程序时,出现'源不可用'错误。 VS中的“模块”窗口显示符号已成功加载。所讨论的资源位于同一解决方案下的一个项目中,但直到运行时才会被编译。使用Roslyn调试动态编译代码

有没有人成功地使这项工作?谢谢!

再现:https://gist.github.com/toraora/a9d4eb8679383fe659da04d3be5c2d6e(我要是把实际的解决方案时,我在设置完这台机器上的SSH密钥)

+0

你介意发布一个最小的例子来重现这个问题吗?当然,我可以自己写,但我很懒:-) –

+1

繁殖张贴! –

+4

这个问题很容易被发现:你唯一使用的'srcfile'在'File.ReadAllText'中。由于您不提供任何方式知道源文件的方式,因此Roslyn无法生成允许找到该源文件的调试信息。但对于不太熟悉Roslyn API的人来说,解决方案并不是那么明显。 – hvd

回答

4

啊,因此该解决方案是有:

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

谢谢@hvd!