首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试用Roslyn CSharpScript执行的脚本代码

调试用Roslyn CSharpScript执行的脚本代码
EN

Stack Overflow用户
提问于 2018-06-26 13:52:22
回答 1查看 1.9K关注 0票数 5

我创建这个测试控制台应用程序是为了使用C#脚本引擎运行一些Microsoft.CodeAnalysis.CSharp.Scripting代码(在Microsoft.CodeAnalysis.CSharp.Scripting nuget包中)。

代码语言:javascript
复制
     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();

这是可行的,但现在我也想选择以某种方式调试到正在执行的脚本中。有办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-26 13:52:22

想出了一种通过将代码写入临时文件并添加指向该文件的调试信息的方法。然后我可以进入RunAsync调用,visual将加载临时文件,显示一个执行指针,并让我检查变量。

代码语言:javascript
复制
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文件中加载代码,所以如果我能够指向原始文件并以某种方式映射行号会更好。但这已经是一个好的开始。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51044585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档