Ich habe einige C# Unit-Tests für ein VS2012-Projekt, das eine VS2010 C++ DLL mit DllImport Pinvoke aufruft.verhindern vstest Entdeckungs-Engine locking DLLs
Als Pre-Build-Ereignis für das Testprojekt, kopiere ich die neueste Version der DLL in das Binärprojekt für den Test.
Dies schlägt wiederholt fehl, wenn vstest.discoveryengine ausgeführt wird. Es sieht so aus, als würde die 'discovery engine' die Tests laden und die DLL sperren.
Wenn ich Vstest-Discovery-Engine, dann kann ich die Tests erstellen und ausführen. ansonsten die Erstellung fehl, und VS2012 bietet eine frühere Version (mit einem Modell Dialog, der keine ‚diese Meldung nicht mehr anzeigen‘ Option hat) läuft
Gibt es etwas, was ich tun kann, entweder um den Test zu zwingen Projekt, um die DLL zu entladen, wenn die Tests nicht ausgeführt werden, oder um die ausführbare Hintergrundermittlung zu deaktivieren?
Ich habe eine Workaround gehackt, indem Sie eine ausführbare Datei namens Kealakekua erstellt, die vstest.discoveryengine.x86, vstest.executionengine.x86, und damit als erster Teil des Pre-Build-Ereignisses kopiert die Dateien und Build , würde aber lieber nicht visuelles Studio für meine Datei kämpfen.
Wäre es eine Option, die DLL über Code in Ihre Testklassen zu laden? – Joel
@Joel nicht wirklich - die Tests laden die DLL nicht direkt, der Code, den sie testen, tut; Ich möchte den Produktionscode nicht mehr als nötig verkomplizieren müssen, um seine Arbeit zu erledigen. Wenn jedoch die Verbindung zwischen dem Testcode und der getesteten Assembly auf der Seite des Testcodes unterbrochen werden kann, könnte das funktionieren. –