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


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

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

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

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

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

有人可以帮忙吗?

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


4479
2018-06-02 19:19


起源



答案:


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

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

taskkill /f /im QTAgent32.exe
exit 0

11
2018-01-13 01:54



预先构建的想法实际上非常好。从现在开始我可能不得不使用它。谢谢。 - JMcCarty
在以下行中添加一个 exit 0 避免qtagent32未运行时出错。 - Christian
@Christian没有帮助,我甚至得到了错误 exit 0 当qtagent32没有运行时。有什么帮助,而是使用这个命令: start taskkill /f /im QTAgent32.exe - theV0ID


答案:


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

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

taskkill /f /im QTAgent32.exe
exit 0

11
2018-01-13 01:54



预先构建的想法实际上非常好。从现在开始我可能不得不使用它。谢谢。 - JMcCarty
在以下行中添加一个 exit 0 避免qtagent32未运行时出错。 - Christian
@Christian没有帮助,我甚至得到了错误 exit 0 当qtagent32没有运行时。有什么帮助,而是使用这个命令: start taskkill /f /im QTAgent32.exe - theV0ID


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


0
2018-06-03 14:28