Почему VSTestHost.exe загружает сборку из каталога c: \ windows \ assembly \ temp? - PullRequest
2 голосов
/ 08 января 2010

Я разрабатываю сборку, которая должна быть установлена ​​в GAC, и как часть шага после сборки я гарантирую, что GAC обновляется после каждой сборки. Если я создаю (Visual Studio) модульный тест (в сборке отдельных тестов) для вызова нового метода в тестируемом классе, то реализую метод в тестируемом классе (стиль TDD), затем run тест (CTRL R, T), тестируемая сборка и проект модульного тестирования, создаются (и сборка обновляется в GAC).

Тест не пройден (выдает исключение System.MissingMethodException для нового метода). Если я сейчас отладлю тест, то тест пройден, и после этого я смогу запустить тест, и он пройдет.

В рамках моего исследования я добавил бесконечный цикл в тест и затем запустил его. Я использовал Process Explorer, чтобы найти путь к DLL, которая загружается во время теста. Я нахожу это в C: \ WINDOWS \ assembly \ temp \ 4XY349E7C5 есть дескриптор сборки. Используя трюк, который я нашел здесь , чтобы посмотреть в этом каталоге, я нахожу более старую версию моей dll, чем в GAC, и если я использую Reflector для проверки dll, я считаю, что она не содержит новый метод добавлено, что объясняет MissingMethodException.

Так почему VSTestHost.exe загружает dll в временный каталог, и есть ли какой-то способ для меня, чтобы убедиться, что используется правильная dll?

1 Ответ

2 голосов
/ 27 января 2010

Чтение этой статьи указало мне на причину проблемы - VSTestHost.exe сохраняет старую версию сборки загруженной (то есть версию, указанную в gac \ temp папка, которая будет выгружена при выходе из VSTestHost).

Решение проблемы состояло в том, чтобы изменить настройку в Инструменты / Параметры / Инструменты тестирования / Выполнение теста - снимите флажок «Поддерживать работу механизма выполнения теста между тестами». Теперь VSTestHost запускает новый экземпляр для каждого запуска теста и загружает правильную версию моей DLL из GAC.

...