2010-11-23 2 views
1

Umwelt hier ist C# /. Net 4.Side-by-Side-Ausführung und MS Einheit Test

In meinem MS Unit Test Unit-Test-Projekt, das ich ein Stück Code bin Tests, die für einig Datum eines COM-DLL verwendet Konvertierungsberechnungen (dies wiederum verwendet einige andere COM-DLLs, also sind alle drei COM-DLLs beteiligt).

Wenn ich in einer normalen Anwendung/Service-Setup ausgeführt wird, habe ich kein Problem, die Side-by-Side-Ausführung durch Verwendung von Manifesten Verknüpfung mit den COM-DLLs Assembly Identitäten zu funktionieren, aber beim Versuch, dasselbe zu tun Von meinem Unit-Test-Projekt bekomme ich immer einen Fehler aufgrund von 'Klasse nicht registriert' Ausnahmen.

Nun, ich habe versucht, dies bereits:

  • Einbettung des Test DLL Manifest
  • sowohl den Test DLL Manifest Einbettung, die COM-DLLs Manifeste + die COM-DLLs selbst

Aber umsonst. Ich frage mich also: Wie kann ich die Komponententestumgebung auf die COM-Verknüpfung durch die Manifeste aufmerksam machen? Für mich sieht es so aus, als würde die DLL-Manifestverknüpfung nicht ganz funktionieren (die EXE-Manifeste funktionieren gut), aber diese Art von Gedanken macht normalerweise etwas falsch ...

Ich bin normalerweise ziemlich erfolgreich auf der Suche nach Sachen wie diese, aber auf dieser einen, ich hatte sehr wenige Hits, und nichts, das diesem ähnelt, so bitte, wenn Sie irgendwelche Gedanken oder Input haben, teilen Sie :) Und wenn Ausarbeitung benötigt wird, lass es mich wissen.

(Ich weiß, dass die Verwendung der COM-DLLs könnte wahrscheinlich durch eine Abhängigkeitsinjektion der richtige Ort vermieden werden, aber für den Moment möchte ich diesen Fall in Bezug auf Unit-Tests eine Seite-an-Seite-Setup erkunden).

Mit freundlichen Grüßen

Jesper

Antwort

0

Ich bin mit MS Unit-Test nicht vertraut, so ist dies nur Vermutungen.

In Ihrer normalen Anwendungskonfiguration haben Sie über Ihr App-Manifest auf die COM-Server-Manifeste verwiesen, sodass der allgemeine "Prozessaktivierungskontext" die richtigen Verweise enthält.

Im Komponententestszenario steuern Sie die Anwendung nicht, daher enthält der Prozessaktivierungskontext nicht die richtigen Referenzen. Sie haben das Testdll-Manifest in Ihre DLL eingebettet. Wenn Sie jedoch keine zusätzliche Arbeit verrichten, können statische DLL-Abhängigkeiten für das Manifest aufgelöst werden. Der Manifestaktivierungskontext ist nicht "aktiv", wenn der DLL-Code aktiv ist. Sie müssen diesen Kontext selbst verwalten, indem Sie den Kontext um Ihre Aufrufe manuell in den COM-Server erstellen und aktivieren.

Betrachten Sie zum Beispiel CSRegFreeCOMClient aus dem OneCode-Projekt auf CodePlex.