2012-01-30 1 views

ответ

5

Компания Cecil не предоставляет API для проверки соответствия pdb и dll. Тем не менее, он проверяет, когда вы читаете сборку и пытаетесь прочитать ее символы.

Но что значит точно для pdb, чтобы он соответствовал модулю?

Это означает, что pdb и модуль совместно используют запись, содержащую тот же идентификатор GUID, и номер версии pdb (также названный возраст).

Иногда вы хотите только проверить GUID, иногда вы хотите проверить оба. Cecil сам по себе не предоставляет вам способ переопределить поведение по умолчанию, но это очень простое изменение. Посмотрите на источник PdbReader.

В настоящее время проверка выполняется в PopulationFunctions, и в настоящее время мы не применяем, чтобы возраст pdb был таким же, как и запись отладки в сборке. Вы можете легко изменить это на что-то большее по своему вкусу.

Или вы можете использовать другой инструмент целиком: я использовал chkmatch с удовлетворением.

+0

+1 для chkmatch. Я также однажды создал инструмент для диагностики PDB (исходные файлы и т. Д.), Разрывая открытый Cecil и захлопывая его на WinForm, но Code настолько уродлив, что мне было бы слишком стыдно публиковать его. Тем не менее, потребовалось полчаса, чтобы написать, чтобы было легко воспроизвести –