Нет номеров строк в исключениях из сборки, созданной CompileAssemblyFromSource - PullRequest
3 голосов
/ 26 мая 2009

В моем приложении есть функция сценариев, где я компилирую сборку в памяти из сценария пользователя, используя CodeDomProvider.CompileAssemblyFromSource. Это похоже на то, что описано в этом ответе .

Это работает очень хорошо, но любые исключения, которые вызываются из кода скрипта, не имеют номеров строк в трассировке стека. Я попытался установить compilerParameters.IncludeDebugInformation = true, но он по-прежнему не включает номера строк.

Можно ли получить номера строк исключений из сборки в памяти?

Вот ключевые фрагменты кода, которые я использую для компиляции сборки:

        CompilerParameters compilerParameters =
            compilerInfo.CreateDefaultCompilerParameters();
        compilerParameters.GenerateInMemory = true;
        compilerParameters.GenerateExecutable = false;
        compilerParameters.IncludeDebugInformation = true;

        ...

        CodeDomProvider codeProvider = compilerInfo.CreateProvider();
        CompilerResults compilerResults =
            codeProvider.CompileAssemblyFromSource(
                compilerParameters,
                new string[] { sourceCode });

Ответы [ 3 ]

4 голосов
/ 26 мая 2009

Мы работали над этим, записывая исходный код во временный файл, а затем используя этот файл для компиляции кода, а не строки в памяти. Это дало нам значимую отладочную информацию, которую мы иначе не смогли бы получить.

2 голосов
/ 26 мая 2009

Из комментариев, которые я нашел здесь и здесь , похоже, что файл PDB для сборки должен находиться в том же каталоге, что и сборка, прежде чем будут присоединены номера строк. Похоже, это исключает отладочную информацию для сборок в памяти.

0 голосов
/ 24 июля 2015

В приложении, разработанном для .NET Framework 4, я получаю номера строк в трассировках стека исключений, когда в системе, на которой я работаю, установлен .NET Framework 4.5 (или, вероятно, позже), но я не получаю их, когда он имеет только .NET Framework 4 (полный профиль или профиль клиента).

Так что да, теперь можно получать номера строк для исключений из сборки в памяти, а именно, работая на .NET Framework 4.5.

...