Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 QTAgent32.exe在执行后保持DLL的句柄打开_Visual Studio 2010_Unit Testing_Dll_C++ Cli - Fatal编程技术网

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

Visual studio 2010 QTAgent32.exe在执行后保持DLL的句柄打开,visual-studio-2010,unit-testing,dll,c++-cli,Visual Studio 2010,Unit Testing,Dll,C++ Cli,我在使用VisualStudio2010的单元测试框架时遇到了一些问题。当前,QTAgent32将在测试执行完成后维护对DLL的引用 DLL是一个围绕本地C++代码的C++/CLI包装器。包装器公开的对象实际上从未由托管代码分配。它所做的唯一参考是在处理过程中进行最终检查,以查看它是否在类的生命周期内设置 If(_obj != null) { _obj.Dispose(); _obj = null; } 我知道这是一个事实,因为如果我单步执行代码并观察调试器控制台的输出,我可以看到D

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

DLL是一个围绕本地C++代码的C++/CLI包装器。包装器公开的对象实际上从未由托管代码分配。它所做的唯一参考是在处理过程中进行最终检查,以查看它是否在类的生命周期内设置

If(_obj != null)
{
  _obj.Dispose();
  _obj = null;
}
我知道这是一个事实,因为如果我单步执行代码并观察调试器控制台的输出,我可以看到DLL的符号在点击if(这是有意义的)之前不会加载。所有涉及的托管对象都实现IDisposable,以确保所有本机对象都得到保护,以避免内存泄漏

基于这个问题:我确保没有显式打开任何文件流(包括控制台),甚至没有使用任何文件,但问题仍然存在。我已经没有办法做什么了

有人能帮忙吗


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

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

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

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

taskkill /f /im QTAgent32.exe
exit 0

预构建的想法实际上非常好。从现在起,我可能不得不使用它。谢谢。在下面的行中添加一个退出0,以避免qtagent32未运行时出错。@Christian没有帮助,即使qtagent32未运行时退出0,我也会出错。有帮助的是改用这个命令:
start taskkill/f/im QTAgent32.exe