Отладка кода сценария, который выполняется с Roslyn CSharpScript - PullRequest
0 голосов
/ 26 июня 2018

Я создал это тестовое консольное приложение для запуска некоторого кода C # с помощью механизма сценариев Roslyn (в пакете 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);
     script.RunAsync().Wait();

Это работает, но теперь мне бы хотелось, чтобы опция как-то отлаживалась в выполняемый скрипт. Есть ли способ сделать это?

1 Ответ

0 голосов
/ 26 июня 2018

Придумал способ сделать это, записав код во временный файл и добавив отладочную информацию, указывающую на этот файл. Затем я могу перейти к вызову 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 void 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);
            script.RunAsync().Wait();   
         }
         finally
         {
            File.Delete(tmpFile);
         }
         Console.ReadKey();
      }
   }
}

Кажется, что отладка работает только тогда, когда в настройках отладчика Visual Studio включено «Просто мой код».

В моем случае я загружаю код из файла XML, поэтому было бы лучше, если бы я мог указать на этот исходный файл и как-то отобразить номера строк. Но это уже хорошее начало.

...