Номер строки для исключения, генерируемого в скомпилированном во время выполнения коде DotNET
-
20-09-2019 - |
Вопрос
Не совсем то же самое , что этот поток, но довольно близко.
Моя программа позволяет людям вводить некоторый код на VB или C #, который компилируется, загружается и выполняется во время выполнения.Моими параметрами компилятора являются:
CompilerParameters params = new CompilerParameters();
params.GenerateExecutable = false;
params.GenerateInMemory = true;
params.IncludeDebugInformation = false;
params.TreatWarningsAsErrors = false;
params.WarningLevel = 4;
Когда этот код выдает исключение, я хотел бы иметь возможность отображать окно сообщения, которое помогает пользователям отлаживать свой код.Сообщение об исключении - это просто, но номер строки - это то место, где я застрял.
Я подозреваю, что для того, чтобы получить номер строки, мне, возможно, потребуется кардинально изменить CompilerParameters и, возможно, даже способ хранения / загрузки этих DLL-файлов.
Кто-нибудь знает наименьшие шаги, необходимые для того, чтобы это заработало?
Решение
установите OutputAssembly во временный файл, установите GenerateInMemory = false, IncludeDebugInformation = true
Это должно сгенерировать символы и позволить вам получить полную трассировку стека со строками кода