阻止vstest发现引擎锁定DLL

Pet*_*ham 21 visual-studio-2012

我对VS2012项目进行了一些C#单元测试,该项目使用DllImport pinvoke调用VS2010 c ++ DLL.

作为测试项目的预构建事件,我将最新版本的DLL复制到二进制项目进行测试.

如果vstest.discoveryengine正在运行,则会反复失败.似乎'发现引擎'正在加载测试并对DLL保持锁定.

如果我杀了vstest发现引擎,那么我可以构建并运行测试.否则构建失败,VS2012提供运行以前的版本(模型对话框没有'不再显示此消息'选项)

我可以做些什么来强制测试项目在没有实际运行测试时卸载DLL,或者禁用后台发现可执行文件?

我已经通过创建一个名为Kealakekua的可执行文件来破解了一种解决方法,它可以杀死vstest.discoveryengine.x86,vstest.executionengine.x86,并且作为预构建事件的第一部分,它可以复制文件并构建,但是更喜欢不要为我的文件打视觉工作室.

小智 1

我遇到了类似的问题,我创建了一个“测试”项目,但实际上没有任何测试。(作为一名 C++ 库开发人员,我想确保某些标头能够在启用 CLR 的情况下进行编译,因此我制作了一个假 CLR 项目,仅使用 CLR 编译它们。如果编译成功,则通过。)创建的 DLL 正在被由 vstest.discoveryengine 无限期地保持打开状态。

我通过向项目添加忽略的测试来修复它。我认为 vstest.discoveryengine 将保留该 dll,直到它找到 dll 中的所有测试,但如果没有找到测试,那么它将永远保留它。

我添加的测试(我认为这是默认测试)注意 TEST_IGNORE() 以确保它不被执行:

#include <CppUnitTest.h>

namespace CLRTests
{
   TEST_CLASS(CLRTestsClass)
   {
   public:

      BEGIN_TEST_METHOD_ATTRIBUTE(CLRTest1)
         TEST_OWNER(L"")
         TEST_DESCRIPTION(L"")
         TEST_PRIORITY(1)
         TEST_IGNORE()
         END_TEST_METHOD_ATTRIBUTE()
         TEST_METHOD(CLRTest1)
      {
         // TODO: Your test code here
      }

   };
}
Run Code Online (Sandbox Code Playgroud)

我希望这在你的情况下是可能的。