Ответ от @ bbmud правильный, хотя он пропускает одно исправление ошибки. CSharpCodeGenerator (класс в .NET кода C # для компиляции в IL) настроен на удаление файлов pdb сразу после их создания, ЕСЛИ ВЫ не добавите /debug:pdbonly
в строку CompilerOptions. Однако, если вы это сделаете, флаг IncludeDebugInformation
игнорируется, и компилятор генерирует оптимизированный код, который трудно отладить. Чтобы избежать этого, вы должны явно указать генератору кода, чтобы он сохранял все файлы.
Вот полный рецепт:
parameters.GenerateInMemory = false; //default
parameters.TempFiles = new TempFileCollection(Environment.GetEnvironmentVariable("TEMP"), true);
parameters.IncludeDebugInformation = true;
parameters.TempFiles.KeepFiles = true
Вот часть преступника кода CSharpCodeGenerator:
string fileExtension = "pdb";
if ((options.CompilerOptions != null) && (CultureInfo.InvariantCulture.CompareInfo.IndexOf(options.CompilerOptions, "/debug:pdbonly", CompareOptions.IgnoreCase) != -1))
{
results.TempFiles.AddExtension(fileExtension, true);
}
else
{
results.TempFiles.AddExtension(fileExtension);
}
TempFiles.AddExtension(fileExtension, true)
говорит компилятору сохранить файлы pdb. Параметр else results.TempFiles.AddExtension(fileExtension);
указывает, что pdb следует рассматривать как все временные файлы, что по умолчанию означает их удаление.