2011-02-20 3 views
0

Я пытаюсь проанализировать некоторые сборки с помощью NDepend, но он жалуется, что файлы pdb и исходные файлы не синхронизированы друг с другом. Однако разработка и компиляция сборок произошла на том же сервере, где я запускаю NDepend.Файлы PDB и источник не синхронизированы

Как это исправить? Я видел, как многие люди сталкиваются с этой проблемой, от поиска в Интернете, но никаких реальных решений. Кроме того, я буду запускать NDepend на другом сервере (сервер автоматической сборки) с dev-сервера, поэтому в будущем у меня, скорее всего, будет такая же проблема. Глядя на документацию NDepend, путь туда, где хранится источник, всегда должен быть одинаковым (но я никогда не нарушал это правило).

Может ли перекомпиляция сборки исправить это? Насколько серьезной является эта проблема?

Благодаря

+0

Я никогда не использовал NDepend но перекомпиляция будет первым думаю, что я хотел бы попробовать. :) –

ответ

1

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

Лучшей эвристикой может быть использование контрольных сумм исходных файлов, содержащихся в файле PDB. Используя эту контрольную сумму, NDepend смог увидеть, было ли изменено содержимое исходного файла. Вот как работает VS в момент отладки. Мы (команда NDepend) не реализовали эту эвристику, потому что это может быть дорогостоящим, и простой эвристики, основанной на LastWriteTime, достаточно для большинства случаев реального мира.

Patrick - NDepend Team

+0

Любая идея, где найти контрольные суммы для исходных файлов в pdb? См. Http://stackoverflow.com/questions/17120215/how-does-visual-studio-know-if-the-source-file-matches-the-original-version-cs –

+0

Не уверен, что Mono.Cecil.PDB или MS CCI PDB имеет эту функцию сейчас? Просто проверьте это: http://ccimetadata.codeplex.com/discussions/topics/4673/pdb-reader –

+0

Я нашел контрольные суммы MD5. Я смог изменить код PDB MS CCI, чтобы добраться до них. Я не понимаю, почему все в этой кодовой базе отмечено как внутреннее. Я, вероятно, собираюсь написать своего собственного читателя. –

Смежные вопросы