QTAgent32.exe сохраняет дескриптор библиотеки DLL открытой после выполнения - PullRequest
11 голосов
/ 02 июня 2011

Я столкнулся с небольшой проблемой при использовании среды модульного тестирования Visual Studio 2010.В настоящее время QTAgent32 будет поддерживать ссылку на DLL после завершения выполнения теста.

Рассматриваемая DLL является оболочкой c ++ / cli вокруг некоторого нативного кода c ++.Объект, предоставляемый оболочкой, фактически никогда не назначается управляемым кодом.Единственное упоминание, которое он делает, - это окончательная проверка во время удаления, чтобы увидеть, была ли она установлена ​​в течение времени жизни класса.

If(_obj != null)
{
  _obj.Dispose();
  _obj = null;
}

Я знаю это точно, так как, если я прохожу код и наблюдаю за отладчикомКонсольный вывод Я вижу, что символы для DLL не загружаются, пока не нажмете if (что имеет смысл).Все задействованные управляемые объекты реализуют IDisposable, чтобы гарантировать, что все собственные объекты позаботятся о том, чтобы избежать утечек памяти.

Основываясь на этом вопросе: QTAgent32 Удержание файла открытым Я убедился, что никакие файловые потоки не были явнооткрыт (включая консоль) и файлы даже не используются, но проблема остается.У меня заканчиваются идеи о том, что делать.

Кто-нибудь может помочь?

TL; DR: QTAgent32.exe сохраняет открытую ссылку на оболочку c ++ / cliэто никогда не создается.

Ответы [ 2 ]

11 голосов
/ 13 января 2012

Я столкнулся с той же проблемой при использовании библиотеки Фортрана.Проблема сохранялась, даже если функция DLL была полностью пустой.

Я до сих пор не знаю, в чем проблема, но простой обходной путь - указать уничтожение процесса QTAgent32 в качестве события перед сборкой в ​​вашем файле.проект.

taskkill /f /im QTAgent32.exe
exit 0
0 голосов
/ 03 июня 2011

Вероятно, он открывает DLL в режиме только для метаданных для поиска тестовых атрибутов. Это не приведет к загрузке символов, но может заблокировать файл.

...