Как я могу использовать Mono.Cecil для проверки соответствия файлов .pdb и .dll?

Мы используем Mono.Cecil в нашем проекте. Есть ли у него какие-либо функции, которые позволяют мне проверить, совпадают ли определенные PDB и DLL?

Спасибо!


person VitalyB    schedule 30.01.2012    source источник


Ответы (1)


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

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

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

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

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

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

person Jb Evain    schedule 30.01.2012
comment
+1 за chkmatch. Я также однажды создал себе инструмент для диагностики PDB (расположения исходных файлов и т. д.), разорвав Cecil и вставив его в WinForm, но код настолько уродлив, что мне было бы слишком стыдно публиковать его. Тем не менее, на написание ушло полчаса, поэтому легко воспроизвести - person Johannes Rudolph; 31.01.2012