Я использую шаг после сборки в своей сборке С#, чтобы предоставить сигнатуру функции из моей 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?