Как получить покрытие кода при сборке после того, как ExportDll провел его через ildasm / ilasm? - PullRequest
1 голос
/ 11 октября 2011

Я использую шаг после сборки на моей сборке C #, чтобы выставить сигнатуру функции из моей 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-версию кода при сборке и распространении пост-ExportDll-версии. Поскольку в основном меня интересует, тестируется ли код, а не могут ли другие компоненты найти функцию через экспорт DLL, я не считаю это плохим решением. Тем не менее, я чувствую, что это может быть просто кошмаром в управлении сборкой и необходимость объяснить команде «использовать эту сборку, а не эту сборку».

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

1 Ответ

0 голосов
/ 22 февраля 2012

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

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

...