QTAgent32.exe在执行后保持DLL的句柄打开

JMc*_*rty 11 dll unit-testing c++-cli visual-studio-2010

我使用Visual Studio 2010的单元测试框架遇到了一些问题.目前,QTAgent32将在测试执行完成后维护对DLL的引用.

有问题的DLL是围绕一些本机c ++代码的c ++/cli包装器.包装器公开的对象实际上从未由托管代码分配.它唯一的参考是在处理过程中进行最后检查,以确定它是否在课程的生命周期中设置.

If(_obj != null)
{
  _obj.Dispose();
  _obj = null;
}
Run Code Online (Sandbox Code Playgroud)

我知道这是事实,因为如果我单步执行代码并观察调试器控制台输出,我可以看到DLL的符号没有加载,直到命中if(这是有意义的).涉及的所有托管对象都实现了IDisposable,以确保所有本机对象都得到谨慎以避免内存泄漏.

基于这个问题:QTAgent32保持文件打开 我确保没有显式打开文件流(包括控制台),甚至没有使用任何文件但问题仍然存在.关于该怎么做,我的想法已经不多了.

有人可以帮忙吗?

TL; DR: QTAgent32.exe保持对从未实例化的c ++/cli包装器的开放引用.

ryb*_*103 11

我在使用Fortran DLL时遇到了同样的问题.即使DLL函数完全为空,问题仍然存在.

我仍然不知道问题是什么,但一个简单的解决方法是指定杀死QTAgent32进程作为项目中的预构建事件.

taskkill /f /im QTAgent32.exe
exit 0
Run Code Online (Sandbox Code Playgroud)


Ben*_*igt 0

它可能以仅元数据模式打开 DLL ,以便搜索测试属性。这不会触发符号加载,但可能会锁定文件。