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

Ние използваме Mono.Cecil в нашия проект. Има ли някаква функционалност, която ми позволява да проверя дали конкретен PDB и DLL съвпадат?

Благодаря!


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


Отговори (1)


Сесил не излага API, за да тества дали pdb и dll съвпадат. Той обаче прави проверка, когато четете сборка и се опитвате да прочетете нейните символи.

Но какво точно означава pdb да съответства на модул?

Това означава, че pdb и модулът споделят запис, съдържащ абсолютно същия GUID идентификатор и номер на ревизия на pdb (наричан още възраст).

Понякога искате да проверите само GUID, понякога искате да проверите и двата. Cecil сам по себе си не ви предоставя начин да замените поведението по подразбиране, но това е много лесна промяна. Разгледайте изходния код на PdbReader.

Понастоящем проверката е в PopulateFunctions и в момента не налагаме възрастта на pdb да бъде същата като тази на записа за отстраняване на грешки в асемблирането. Можете лесно да го промените с нещо повече по ваш вкус.

Или можете да използвате изцяло друг инструмент: използвах chkmatch със задоволство.

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