Как получить покрытие кода сборки после того, как ExportDll прогнал ее через ildasm/ilasm?

Я использую шаг после сборки в своей сборке С#, чтобы предоставить сигнатуру функции из моей dll. На этом шаге используется инструмент ExportDll из http://www.codeproject.com/KB/dotnet/DllExport.aspx. Однако, если я запускаю свою dll через mstest и пытаюсь получить отчет о покрытии кода, я получаю следующую ошибку:

Instrumentation error while trying to process the file MyAssembly.dll
Error VSP1011 : Unable to obtain debug information. Link with the /Profile linker switch.

Это странно, учитывая, что в сборке нет неуправляемого кода (кроме нескольких сигнатур P/Invoke). Если я сделаю шаг после сборки, мой код будет правильно инструментирован, и я смогу получить отчет о покрытии кода. Поэтому я могу только заключить, что это должен быть шаг после сборки, а не что-то в самом коде.

Я склоняюсь к идее запуска моих модульных тестов с помощью версии кода, отличной от ExportDll, при создании и распространении версии post-ExportDll. Поскольку меня в основном интересует, тестируется ли код, а не могут ли другие компоненты найти функцию через экспорт DLL, я не считаю это плохим решением. Однако я чувствую, что это может быть просто кошмаром в управлении сборкой и необходимостью объяснять команде «используйте эту сборку, а не эту сборку».

Кто-нибудь имел опыт модульного тестирования dll, который был запущен с помощью этого инструмента? Или, возможно, у кого-нибудь есть опыт инструментирования сборки, которая была скомпилирована, декомпилирована и повторно собрана с использованием ildasm/ilasm?


person villecoder    schedule 11.10.2011    source источник


Ответы (1)


Утилита ExportDll перезаписывает исходную сборку, но, вероятно, не обновляет PDB с учетом нового инструментария при перекомпиляции с использованием ilasm. В статье, кажется, не говорится, что это возможно, но если вы используете переключатель /pdb с ilasm, это должно создать PDB который совместим с вашей новой инструментальной сборкой.

Глядя на исходный код, вам нужно добавить переключатель в строку 348 program.cs, чтобы затем ilasm получил указание создать новую PDB.

person Shaun Wilde    schedule 21.02.2012