gpt4 book ai didi

roslyn - 调试使用 Roslyn CSharpScript 执行的脚本代码

转载 作者:行者123 更新时间:2023-12-02 10:32:01 27 4
gpt4 key购买 nike

我创建了这个测试控制台应用程序,以使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com