Wie Sie eine „ComponentActivatorException“ mit Schloss Windsor von einer .net 4.0-Anwendung einer .net 2.0 Komponente
-
21-09-2019 - |
Frage
Ich habe eine Anwendung, die in VS2010 entwickelt wird, und verwendet den Schloss-Windsor IoC, durch eine Konfigurationsdatei.
Eine der Komponenten Ich melde mich, auch in VS2010 entwickelt, verweist auf eine .net 2.0-Komponente (Leadtools), so das 2.0-Projekt neu zu kompilieren, ist keine Option. Wenn die Registrierung des Verpackungskomponente erfolgt, wird ein „ComponentActivatorException“ angehoben wird, die eine „System.TypeInitializationException“ Wraps, die wiederum Anordnung eine „System.IO.FileLoadException“ mit einer Meldung von „Mixed Mode hüllt gegen Version gebaut wird‚v2 .0.50727' der Laufzeit und nicht in der 4.0-Laufzeit ohne zusätzliche Konfigurationsinformationen geladen werden kann. "
Ich habe die Laufzeit Erklärung die Anwendung der Konfigurationsdatei hinzugefügt, wie so:
<!-- useLegacyV2RuntimeActivationPolicy is needed for LEADTools-->
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<supportedRuntime version="v2.0.50727" />
</startup>
Das funktioniert gut, wenn die Verpackungskomponente in Windsor nicht registriert ist, aber es scheint, die Richtlinien sonst außer Acht zu lassen.
Danke!
Lösung 2
Das Problem war wegen Verwendung von „definieren“ s und „wenn“ s in der Konfigurationsdatei gemäß dem Microkernel Dokumentation . Entfernen aller dieser Elemente aus der App.Config Datei erlaubt die Komponenten instanziiert werden, ob sie in dem Behälter Windsor registriert wurden.
Andere Tipps
Ich nehme an, Sie Anmeldung über XML verwenden?
Was passiert, wenn Sie die Komponente im Code registrieren?
Können Sie versuchen, das Problem ohne Fehler zu reproduzieren?
Aufruf Type.GetType("assembly qualified name of the type from .net 2.0 assembly");