我创建了此测试控制台应用程序,以使用Roslyn脚本引擎(在Microsoft.CodeAnalysis.CSharp.Scripting nuget包中)运行一些C#代码。
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();
这可行,但是现在我还希望以某种方式调试正在执行的脚本。有没有办法做到这一点? 最佳答案
通过将代码写入临时文件,然后添加指向该文件的调试信息,找到了一种实现方法。然后,我可以进入RunAsync调用,Visual Studio将加载临时文件,显示执行指针,并让我检查变量。
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 Studio调试器设置中启用了“仅我的代码”时,调试似乎才起作用。在我的实际用例中,实际上是从XML文件加载代码,因此,如果可以指向该原始文件并以某种方式映射行号会更好。但这已经是一个好的开始。
关于roslyn - 使用Roslyn CSharpScript执行的调试脚本代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51044585/