Me he encontrado con un problema al usar el marco de prueba de la unidad de Visual Studio 2010. Actualmente, QTAgent32 mantendrá una referencia a una DLL una vez que la ejecución de una prueba haya finalizado.QTAgent32.exe mantiene el control de una DLL abierta después de la ejecución
La DLL en cuestión es una envoltura de C++/cli alrededor de algún código C++ nativo. El objeto expuesto por el contenedor nunca es asignado por el código administrado. La única referencia que hace es una comprobación final durante la eliminación para ver si se ha establecido durante la vida útil de la clase.
If(_obj != null)
{
_obj.Dispose();
_obj = null;
}
Sé que esto es un hecho ya que si me paso a través del código y ver la salida de la consola depurador puedo ver los símbolos para el DLL no se cargan hasta golpear el caso (que tiene sentido). Todos los objetos administrados involucrados implementan IDisposable para asegurarse de que todos los objetos nativos se cuiden para evitar fugas de memoria.
Basado en esta pregunta: QTAgent32 Holding File Open Me aseguré de que no se abrieran explícitamente archivos (incluida la consola) y aún no se utilizan archivos, pero el problema persiste. Me estoy quedando sin ideas sobre qué hacer.
¿Alguien puede ayudar?
TL; DR: QTAgent32.exe mantiene una referencia abierta a un contenedor C++/cli que nunca se crea una instancia.
La idea de preconstrucción es realmente muy agradable. Debo tener que usar eso a partir de ahora. Gracias. – JMcCarty
Agregue en la siguiente línea una 'exit 0' para evitar un error cuando qtagent32 no se está ejecutando. – Christian
@Christian No ayuda, obtengo un error incluso con 'exit 0' cuando qtagent32 no se está ejecutando. Lo que sí ayuda, es usar este comando en su lugar: 'start taskkill/f/im QTAgent32.exe' – theV0ID