Вопрос

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

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


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

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

Это было полезно?

Решение

От MSDN:

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

Итак, похоже, что «проблема» здесь (из-за отсутствия лучшего слова) заключается в том, что некоторые из ваших DLL создаются в режиме отладки (и, следовательно, создают PDB), а некоторые собираются в режиме выпуска (следовательно, не создают PDB). .Если это так, это легко исправить — зайдите в каждый проект и обновите его настройки сборки.Это будет сценарий по умолчанию, если вы не настраивали параметры командной строки.

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

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

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

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

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

Другие советы

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

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

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

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

xcopy /r /y $(TargetPath) $(ProjectDir)..\$(OutDir)
if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\$(OutDir)

Во-первых, никогда ничего не предполагайте.Очистите решение, пересоберите его в режиме отладки и проверьте, созданы ли все файлы pdb.Если нет, то это ваша проблема.

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

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


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

Если вы просто копируете что-то вручную, скопируйте также вручную PDB-файлы.Я считаю, что Dll ничего не должна «знать» о pdbs.Просто вставьте их в каталог назначения и идите выпить чашечку кофе.Расслабляться.

Когда вы очищаете раствор, проверяйте, действительно ли он очищен.Я видел, как VS оставлял файлы в каталогах bin\debug даже после очистки.Удалите каталог bin\debug во всех ваших проектах и ​​перестройте их.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top