Файлы PDB в Visual Studio bin\debug папки

У меня есть Visual Studio (2008) решение, состоящее из нескольких проектов, не всех в том же пространстве имен. Когда я создаю решение, все файлы DLL, используемые высокоуровневым проектом, TopProject, копируются в папку TopProject\bin\debug. Однако соответствующие .pdb файлы только копируются для некоторых из других проектов. Это - боль, например, при использовании NDepend.

Как Visual Studio решает который .pdb файлы скопировать в более высокий уровень bin\debug папки? Как я могу заставить Visual Studio копировать другие также?


Ссылки следующие: все файлы DLL копируются в центральное расположение без их файлов PDB. TopProject только имеет ссылки на них, скопировал файлы DLL; сами файлы DLL, однако, очевидно знают, где их файлы PDB, и (большинство из них) копируются в debug папка правильно.

10
задан Peter Mortensen 18 September 2019 в 10:52
поделиться

4 ответа

Из MSDN:

База данных программы (PDB), файл содержит отладку и информацию состояния проекта, которая позволяет пошаговую компоновку Настройки отладочного процесса Вашей программы. Файл PDB создается при компиляции программы C/C++ с/ZI или/Zi или Visual Basic/C#/JScript программа.NET с отладкой/.

Таким образом, похоже, что "проблема" здесь (из-за отсутствия лучшего слова) - то, что некоторые Ваши DLLs создаются в режиме отладки (и следовательно испускающей файлы PDB), и некоторые создаются в режиме выпуска (следовательно не испускающий файлы PDB). Если это так, должно быть легко зафиксировать - входят в каждый проект и обновляют его настройки сборки. Это было бы сценарием по умолчанию, если Вы не сделали никакой тонкой настройки параметров командной строки.

Однако это станет более хитрым если это не так. Возможно, Вы - все в выпуске или режиме отладки. Теперь необходимо посмотреть на опции компиляции командной строки (указанный в свойствах проекта) для каждого проекта. Обновите их к отладке / соответственно, если Вы хотите отладчик или удаляете его, если Вы не делаете.

Редактирование в ответ на редактирование

Да, файлы DLL "знают", что имеют файлы PDB и имеют пути к ним, но это не означает слишком много. Копирование просто файлов DLL к данному каталогу, как другие упомянули, не разрешит эту проблему. Вам нужны файлы PDB также.

Копирование отдельных файлов в Windows, за исключением определенного "пакета" - вводит файлы (я не знаю, что термин Microsoft для этого, но "завершаются, пакеты HTML" являются понятием), не делает файлов, связанных с копией. Файлы DLL не собраны в "пакете" путь, так копирование их оставляет их файл PDB.

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

11
ответ дан 3 December 2019 в 20:07
поделиться

Проверьте при очистке решения что оно на самом деле убрано.

Я видел файлы отпуска Visual Studio, бродящие вокруг в bin\debug каталоги даже после очистки. Удалите bin\debug каталог на всех Ваших проектах и восстанавливает.

3
ответ дан 3 December 2019 в 20:07
поделиться

Как в других сообщениях было сказано, у Вас может быть проблема компилятора/повреждения.

Но, как Will сказал, если файлы PDB создаются, но обнаруживающейся, где Вы хотите их, создайте шаг постсборки. Вот шаг постсборки, который я определяю для каждого проекта в моем решении. Это удостоверяется, что все выходные файлы копируются в общий каталог.

Если Ваш файл проекта будет в \SolutionDir\ProjDir, то первая строка шага постсборки скопирует выходные файлы в \Solution\Bin\Release или \Solution\Bin\Debug. Вторая строка копирует файл PDB, если это - отладочная сборка. Я не копирую файл PDB для сборок конечных версий.

Так, \SolutionDir\Bin теперь содержит все Ваши выходные файлы в одном месте.

xcopy /r /y $(TargetPath) $(ProjectDir)..\$(OutDir)
if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\$(OutDir)
3
ответ дан 3 December 2019 в 20:07
поделиться

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

Если они создаются, и они все не становятся скопированными, можно обойти это путем создания события сборки сообщения, которое вручную копирует файлы PDB в желаемые местоположения. Это - просто обходное решение, конечно.

Единственная другая вещь, о которой я могу думать, состоит в том, что Ваш файл решения стал поврежденным. Можно открыть .sln как XML-файл и исследовать содержание. Проверьте конфигурацию на проекты, которые действуют как ожидалось и сравнивают их с теми, которые не являются. Если Вы ничего не видите, необходимо повторить это на уровне проекта. Сравните работу .csproj (или безотносительно) файлы проекта и нерабочие.


Редактирование в ответ на редактирование:

Если Вы просто вручную копируете материал вокруг, то вручную копируют файлы PDF также. Файлы DLL ничего не должны "знать" о файлах PDB, я верю. Просто засуньте их в целевой каталог и пойдите, имеют чашку кофе. Ослабиться.

2
ответ дан 3 December 2019 в 20:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: