QTAgent32.exe сохраняет дескриптор DLL после выполнения
У меня возникла проблема с использованием среды Visual Studio 2010 unit test. В настоящее время QTAgent32 будет поддерживать ссылку на DLL после завершения теста.
Рассматриваемая DLL - это оболочка С++/cli вокруг некоторого кода С++. Объект, открытый оболочкой, на самом деле никогда не назначается управляемым кодом. Единственная ссылка, которую он делает, - это окончательная проверка во время удаления, чтобы убедиться, что она была установлена во время жизни класса.
If(_obj != null)
{
_obj.Dispose();
_obj = null;
}
Я знаю это по факту, так как, если я пройду через код и посмотрю вывод консоли отладчика, я вижу, что символы для DLL не загружаются до тех пор, пока не произойдет нажатие if (что имеет смысл). Все управляемые объекты включают в себя IDisposable, чтобы убедиться, что все собственные объекты позаботились о том, чтобы избежать утечек памяти.
Основываясь на этом вопросе: QTAgent32 Holding File Open, я убедился, что никаких открытых потоков не было открыто (включая консоль), и файлы еще не используются, но проблема остается. У меня заканчиваются идеи о том, что делать.
Может ли кто-нибудь помочь?
TL; DR: QTAgent32.exe сохраняет открытую ссылку на оболочку С++/cli, которая никогда не создается.
Ответы
Ответ 1
Я столкнулся с той же проблемой при использовании библиотеки Fortran DLL. Проблема продолжалась, даже если функция DLL была полностью пустой.
Я все еще не знаю, в чем проблема, но легким обходным путем является определение убийства процесса QTAgent32 в качестве события предварительной сборки в вашем проекте.
taskkill /f /im QTAgent32.exe
exit 0
Ответ 2
Вероятно, он открывает DLL в режиме только для метаданных для поиска атрибутов теста. Это не приведет к загрузке символов, но может заблокировать файл.