Unit Test Adapter hat eine Ausnahme ausgelöst: Einer oder mehrere der angeforderten Typen können nicht geladen werden

Ich versuche, SpecFlow-Tests über die Eingabeaufforderung von Visual Studio 2010 auszuführen, und es wird eine ziemlich stumpfe Fehlermeldung angezeigt:

Unit Test Adapter hat eine Ausnahme ausgelöst: Einer oder mehrere der angeforderten Typen können nicht geladen werden. Rufen Sie die LoaderExceptions-Eigenschaft ab, um weitere Informationen zu erhalten.

Einige Informationen zu meinem VS2010-Projekt-Setup:

Windows 7 Enterprise, 64 Bit (Version 6.1.7601 Service Pack 1 Build 7601)Visual Studio 2010 Premium (v10.0.40219.1 SP1Rel)Verwenden von Tests für die codierte BenutzeroberflächeVerwenden von SpecFlow 1.9.0, das an die CodedUI-Test-API delegiertMSTest.NET v4.0.30319Die gesamte Lösung kompiliert auf 32-Bit-Code (ich habe noch Mitarbeiter, die XP verwenden)

Ich habe ein Post-Build-Ereignis, das einige DLL-Dateien aus meinem NuGet-Paketverzeichnis in das Zielverzeichnis kopiert:

copy $(SolutionDir)packages\SpecBind.1.2.1.71\lib\net45\SpecBind.dll $(TargetDir)
copy $(SolutionDir)packages\SpecBind.CodedUI.1.2.1.71\lib\net45\SpecBind.CodedUI.dll $(TargetDir)

Andernfalls könnte mstest eine Reihe von SpecFlow-Assemblys nicht laden.

Relevante Teile der App.config des Testprojekts

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
    <section name="specBind" type="SpecBind.Configuration.ConfigurationSectionHandler, SpecBind" />
  </configSections>

  <connectionStrings>
    ...
  </connectionStrings>

  <specFlow>
    <!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config -->
    <unitTestProvider name="MsTest" generatorProvider="Specflow.CodedUI.MsTestCodedUiGeneratorProvider, Specflow.CodedUI" runtimeProvider="TechTalk.SpecFlow.UnitTestProvider.MsTest2010RuntimeProvider, TechTalk.SpecFlow" />
    <stepAssemblies>
      <!-- This attribute is required in order to use StepArgument Transformation as described here; 
           https://github.com/marcusoftnet/SpecFlow.Assist.Dynamic/wiki/Step-argument-transformations  -->
      <stepAssembly assembly="SpecFlow.Assist.Dynamic" />
      <stepAssembly assembly="SpecBind" />
    </stepAssemblies>
  </specFlow>
  <specBind>
    <browserFactory provider="SpecBind.CodedUI.CodedUIBrowserFactory, SpecBind.CodedUI" browserType="IE" />
    <!-- For additional details on SpecBind configuration options see the project site. -->
  </specBind>
</configuration>

Der Befehl, mit dem ich die Tests gestartet habe:

C:\path\to\bin\Debug> mstest /testcontainer:MyTests.dll /test:SpecFlowFeatureName

Loading MyTests.dll
Starting Execution...

Results         Top Level Tests
--------        ------------------
Failed          ...
Failed          ...
Failed          ...

...

Ich habe intensiv nach einer Lösung gesucht und finde immer wieder Hinweise auf VS2008 und das Deaktivieren der Codeabdeckung. Ich habe VS2010 und die Codeabdeckung ist in meinen lokalen Testeinstellungen nicht aktiviert.

Windows-Ereignisprotokollanzeige

Nachdem ich mich in meinem Windows-Ereignisprotokoll-Viewer umgesehen hatte, stieß ich endlich auf weitere Informationen (ich hörte Leute, die sich beschwerten, dass sie mit diesem Fehler keinen Stack-Trace finden können - sehen Sie in Ihrer Ereignisanzeige nach).

The description for Event ID 0 from source VSTTExecution cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.

If the event originated on another computer, the display information had to be saved with the event.

The following information was included with the event: 

(QTAgent32.exe, PID 6920, Thread 213) Unit Test Adapter threw exception: System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
   at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
   at System.Reflection.RuntimeModule.GetTypes()
   at System.Reflection.Assembly.GetTypes()
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.GetAssemblyInfo(Assembly assembly)
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.GetTypeInfo(Type type, Boolean checkAlreadyExaminedType)
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.ResolveMethods()
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.Initialize(UnitTestResult result, UnitTestRunner runner, ConsoleOutputRedirector redirector)
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestRunner.Run(UnitTestElement test, ITestContext testContext, Boolean isLoadTest, Boolean useMultipleCpus)

the message resource is present but the message is not found in the string/message table

Ich weiß nicht, wie ich diesen Fehler beheben soll. SpecFlow-Tests werden in Visual Studio problemlos ausgeführt, wenn ich mit der rechten Maustaste in eine im Editor geladene .feature-Datei klicke und "SpecFlow-Szenarien ausführen ..." wähle, sie jedoch nicht über die Befehlszeile ausführen kann.

Irgendwelche Ideen oder zusätzliche Informationen, die ich posten könnte?

Als Randnotiz ergab sich dies aus meiner früheren Frage:Wie können Sie SpecFlow-Szenarien mit MSTest über die Befehlszeile ausführen?

Update Nr. 1

Ich habe ein bisschen mehr herumgestöbert und diesen Blog-Beitrag gefunden:MSTest und 64bit. Ich habe meine lokalen Testeinstellungen überprüft und erzwingt, dass die Tests in 32-Bit ausgeführt werden.

Verwenden Sie jetzt diesen Befehl:

mstest /testcontainer:MyTests.dll /testsettings:"..\..\..\Local.testsettings"

Fehlermeldung:

Test method Blah.Dee.Blah threw exception: 
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.TestTools.UITest.Extension, Version=11.0.0.0, Culture=neutral, PublicKeyToken=...' or one of its dependencies. The system cannot find the file specified.WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

TestCleanup method Blah.Dee.Blah.ScenarioTearDown threw exception. BoDi.ObjectContainerException: BoDi.ObjectContainerException: Interface cannot be resolved: SpecBind.BrowserSupport.IBrowser.

Update Nr. 2

Ich habe den Verweis auf Microsoft.VisualStudio.TestTools.UITest.Extension entfernt und wieder hinzugefügt. Gereinigt. Wieder aufgebaut. Führen Sie den gleichen Befehl erneut aus. Immer noch der gleiche Fehler.

Aus irgendeinem Grund wird versucht, die Microsoft.VisualStudio.TestTools.UITest.Extension-Assembly als Version 11 zu laden, und auf meinem Computer ist Version 10 installiert. Ich versuche aufzuspüren, wo diese Version angegeben wird, damit ich sie ändern kann.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage