PEVerify в коде?

Возможный дубликат:
Есть ли API для проверки MSIL динамической сборки во время выполнения?

Я динамически генерирую сборку, используя Reflection.Emit и тому подобное.

Для модульного теста я хотел бы PEVerify мой IL.

Я могу сделать это из командной строки, но я бы предпочел сделать это в коде.

Есть ли способ сделать это более удобным, чем вызов PEVerify.exe? В идеале я хотел бы напрямую передать динамическую сборку без необходимости сначала сохранять эту сборку на диск.

В идеале я ищу что-то вроде (psuedocode:

Assert.IsFalse(new PEVerifier(myAssembly).Verify().Errors.Any());

person Craig Stuntz    schedule 08.12.2011    source источник
comment
Хм, копаю. Похоже, что реальная работа выполняется экспортом VerifyMethod в peverify.dll в каталоге фреймворка. Я считаю, что вам придется делать это в другом AppDomain. Проверка PE загружает сборку и все ее зависимости. Командная строка может быть просто лучшим вариантом.   -  person vcsjones    schedule 08.12.2011
comment
@MauricioScheffer Согласитесь, это, вероятно, дубликат. Я искал вопросы с тегом [peverify] и пропустил его, так как он не был отмечен.   -  person Craig Stuntz    schedule 08.12.2011


Ответы (1)


Вы могли бы, как предполагает ответ на «дублированный» вопрос, выяснить, как подключиться к собственной DLL, используемой PEVerify.exe (что, как я предполагаю, вызовет проблемы, поскольку оно не задокументировано и, вероятно, может быть изменено).

Другой вариант — использовать класс AssemblyBuilder для написания динамической сборки. который вы создаете, на диск во временном месте, а затем вызываете PEVerify.exe через класс System.Diagnostics.Process (примерно так: PEVerifier делает).

person Justin Niessner    schedule 08.12.2011
comment
Этот класс полезен, потому что это именно то, что я собирался написать (ну, я собирался использовать F#, но...), если бы мне пришлось использовать сборку на диске, так что спасибо за это! - person Craig Stuntz; 08.12.2011