Я считаю, вы имеете в виду CS-Script (если нет, то скорректируйте меня). Я не уверен, как вы это называете, но я нашел this command line documentation (кажется, что позиция в файле справки не отображается в их URL-адресе, вам необходимо перейти на Overview -> Command-line interface
). С .net номер строки включается в трассировку стека, если у вас есть соответствующий файл .pdb
, а номер строки также будет правильным, если во время компиляции не будет выполнена оптимизация (это не должно быть проблемой для CS-Script) , В документации для cscs.exe
есть переключатель /dbg or /d
. Когда вы включите этот переключатель, соответствующий файл .pdb
будет включен в ваш .exe
(или с .dll, если вы строите библиотеку). После того, как у вас есть оба номера строк строк, теперь будет доступно в трассировке стека любого исключения, которое попадает на операцию в этой сборке.
/DBG или/д компилятор
силы, чтобы включать информацию отладки.
Предположим, у нас есть файл с именем Test.cs
с некоторым тестового кода:
cscs.exe /e /dbg Test.cs
Это будет выход 2 файла:
Вот пример содержания Test.cs
, при его выполнении вы увидите номера строк.
using System;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
try
{
throw new Exception("OH NO");
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
Console.ReadLine();
}
}
}
для выполнения инлайн
Это также должно быть возможным с DebugBuild
флагом в разделе EvaluatorConfig
значение ИСТИНА. В моем примере ниже вы получите все ожидаемое BUt при использовании LoadCode
, оно использует временное имя файла, поэтому имя файла выглядит забавным, хотя номер строки правильный. Существуют также команды LoadXXX для загрузки одного или нескольких файлов, которые дадут более красивую трассировку стека, поскольку имя файла теперь известно.
class Program
{
static void Main(string[] args)
{
CSScript.EvaluatorConfig.DebugBuild = true;
CSScript.EvaluatorConfig.Engine = EvaluatorEngine.CodeDom;
Console.WriteLine("Debug on = " + CSScript.Evaluator.DebugBuild);
dynamic script = CSScript.Evaluator
.LoadCode(@"using System;
public class Script
{
public int Sum(int a, int b)
{
try{
throw new Exception();}
catch(Exception ex){
Console.WriteLine(ex.StackTrace);
}
return a+b;
}
}");
int result = script.Sum(1, 2);
Console.WriteLine(result);
Console.ReadLine();
}
}
Я сделал тест все это, чтобы проверить, что он делает работу. Если у вас есть проблемы, просто дайте мне знать.
Помогает ли вам ответить ниже? Если нет, в чем вы все еще сталкиваетесь? – Igor
Извините, я был занят другими проектами. Будет проверять ответ как можно скорее. – Macke