QTAgent32.exe сохраняет дескриптор библиотеки DLL, открытой после выполнения

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

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

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

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

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

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

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

11
задан Community 23 May 2017 в 11:48
поделиться