2010-02-16 6 views
0

J'ai une application en cours de développement dans VS2010, et utilise Castle-Windsor IoC, à travers un fichier de configuration. L'un des composants que j'inscris, également développé dans VS2010, fait référence à un composant .net 2.0 (LeadTools), donc recompiler le projet 2.0 n'est pas une option. Lorsque l'enregistrement du composant d'emballage est terminé, une "ComponentActivatorException" est levée, ce qui enveloppe une "System.TypeInitializationException", qui à son tour encapsule une "System.IO.FileLoadException" avec un message de "L'assemblage en mode mixte est construit sur la version 'v2 .0.50727 'du runtime et ne peut pas être chargé dans le runtime 4.0 sans informations de configuration supplémentaires. "Obtenir une "ComponentActivatorException" à l'aide de Castle Windsor à partir d'une application .net 4.0 à l'aide d'un composant .net 2.0

J'ai ajouté la déclaration d'exécution au fichier de configuration de l'application, comme si:

<!-- useLegacyV2RuntimeActivationPolicy is needed for LEADTools--> 
<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    <supportedRuntime version="v2.0.50727" /> 
</startup> 

Cela fonctionne bien si le composant d'emballage n'est pas enregistré à Windsor, cependant, il ne semble pas tenir compte des directives autrement .

Merci!

+0

Pouvez-vous publier la trace de la pile d'exceptions complète? –

Répondre

0

Le problème est dû à l'utilisation de « définir » et « si » s dans le fichier de configuration, par le MicroKernel documentation. La suppression de tous ces éléments du fichier App.Config permettait d'instancier les composants, qu'ils soient ou non enregistrés dans le conteneur Windsor.

+0

cool. Je suis content que vous ayez réussi à résoudre le problème. Pourriez-vous créer une reproduction du problème et l'envoyer au groupe Castle, afin que nous puissions voir s'il y a quelque chose à faire pour y remédier? –

0

Je suppose que vous utilisez l'enregistrement via XML? Que se passe-t-il si vous enregistrez le composant dans le code?

Pouvez-vous essayer de reproduire le problème sans erreur?

appel Type.GetType("assembly qualified name of the type from .net 2.0 assembly");

+0

Malheureusement, l'enregistrement du composant via le code donne les mêmes résultats, avec une trace de pile légèrement plus courte (pas d'exception Windsor). Essayer Type.GetType() déclenche également une "System.IO.FileLoadException", lorsqu'elle est effectuée via la même application. C'est presque comme si la politique d'activation n'était pas prise en compte pour une raison quelconque. – Hugo

+0

Ceci suggère que ce n'est pas vraiment un problème de Windsor - plutôt, peut-être un bug dans la politique, qui n'est pas pris en compte lors de l'utilisation de la réflexion pour charger une bibliothèque? (juste deviner) –

Questions connexes