Obtenir un « ComponentActivatorException » en utilisant le château de Windsor depuis une application .NET 4.0 en utilisant un composant .net 2.0
-
21-09-2019 - |
Question
J'ai une application qui est en cours d'élaboration dans VS2010, et utilise du château de Windsor-IoC, grâce à un fichier de configuration.
L'un des éléments que je suis, l'enregistrement a également développé dans VS2010, référence à un composant .net 2.0 (de LeadTools), la recompilation sorte que le projet 2.0 n'est pas une option. Lorsque l'enregistrement d'un composant d'emballage est fait, un « ComponentActivatorException » est élevé, qui enveloppe un « System.TypeInitializationException », qui à son tour une enveloppe « System.IO.FileLoadException » avec un message de « montage en mode mixte est construit contre la version « v2 .0.50727' de l'exécution et ne peut pas être chargé dans l'exécution 4.0 sans informations de configuration supplémentaires. "
J'ai ajouté la déclaration d'exécution au fichier de configuration de l'application, comme ceci:
<!-- 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 ne pas tenir compte des directives autrement.
Merci!
La solution 2
Le problème est dû à l'utilisation de « définir » et de « si » s dans le fichier de configuration, par documentation MicroKernel . Suppression de tous les éléments du fichier App.Config les différents composants à instancier, que ce soit ou non ils ont été enregistrés dans le conteneur Windsor.
Autres conseils
Je suppose que vous utilisez l'enregistrement via XML?
Qu'est-ce qui se passe si vous enregistrez le composant dans le code?
Pouvez-vous essayer de reproduire le problème sans erreur?
Type.GetType("assembly qualified name of the type from .net 2.0 assembly");
d'appel