我创建这个测试控制台应用程序是为了使用C#脚本引擎运行一些Microsoft.CodeAnalysis.CSharp.Scripting代码(在Microsoft.CodeAnalysis.CSharp.Scripting nuget包中)。
string code = "int test = 123;\r\nConsole.WriteLine(\"hello, world!\");";
var options = ScriptOptions.Default.WithImports("System");
var script = CSharpScript.Create(code, options);
await script.RunAsync();这是可行的,但现在我也想选择以某种方式调试到正在执行的脚本中。有办法吗?
发布于 2018-06-26 13:52:22
想出了一种通过将代码写入临时文件并添加指向该文件的调试信息的方法。然后我可以进入RunAsync调用,visual将加载临时文件,显示一个执行指针,并让我检查变量。
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
using System;
using System.IO;
using System.Text;
namespace RoslynScriptingTest
{
class Program
{
static async Task Main(string[] args)
{
string code = "int test = 123;\r\nConsole.WriteLine(\"hello, world!\");";
string tmpFile = Path.GetTempFileName();
var encoding = Encoding.UTF8;
File.WriteAllText(tmpFile, code, encoding);
try
{
var options = ScriptOptions.Default
.WithImports("System")
.WithEmitDebugInformation(true)
.WithFilePath(tmpFile)
.WithFileEncoding(encoding);
var script = CSharpScript.Create(code, options);
await script.RunAsync();
}
finally
{
File.Delete(tmpFile);
}
Console.ReadKey();
}
}
}只有在visual调试器设置中启用“仅我的代码”时,调试才能工作。
在我的实际用例中,我实际上是从一个XML文件中加载代码,所以如果我能够指向原始文件并以某种方式映射行号会更好。但这已经是一个好的开始。
https://stackoverflow.com/questions/51044585
复制相似问题