C# de Type A ne peut pas être utilisé pour le Type B ( InvalidCastException)... Contexte de l'enfer?
Je vais avoir une très désagréable problème avec ma webapp.
L'app est conçu comme suit :
- La racine de l'Application est le chargement d'un SWF Flex, qui à son tour charge une 3ème partie SWF Flex module dans un sous-app (MagickECB).
- Les deux Applications de référence Albums.dll, dll trouvé dans /bin et /MagickECB/bin et les deux Applications partagent le même Pool d'Applications IIS.
MODIFIER : ce sont deux projets, la racine de l'application du projet et de la subapp projet. Subapp projet de référence de la racine de l'application du projet.
Lors du chargement de la sous application du module flex à partir de la racine de l'application de l'application flex, nous aléatoirement un plâtre d'erreur comme suit :
Il y avait une erreur lors de l'obtention
configuration de l'Album:
[A]Les Albums.LocalizationConfiguration
ne peut pas être lancé à
[B]Les Albums.LocalizationConfiguration.
Tapez Un provient de " les Albums,
Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null " dans le contexte
'Par défaut' à l'emplacement
'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary
ASP.NET
Files\magickecb\4414db97\126f5aaf\assembly\dl3\cf281292\4a6ecec8_8a7bcb01\Albums.DLL'.
Type B provient de " les Albums,
Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null " dans le contexte
'LoadFrom' à l'emplacement
'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary
ASP.NET
Files\magickecb\4414db97\126f5aaf\assembly\dl3\017fab88\a91238d1_7977cb01\Albums.dll'.
au
Les Albums.LocalizationConfiguration.GetConfig()
au Albums.CGlobal.GetUserLocale(String
userHandle)
Essayer d'étudier cette question, j'ai découvert la méthode GetConfig causant la fonte d'erreur renvoyé
return (LocalizationConfiguration)ConfigurationManager.GetSection("Localization/Localization");
La section dans le site Web.la config est déclarée comme suit : (MODIFIER : racine de l'application web.config)
<sectionGroup name="Localization">
<section name="Localization" type="Albums.LocalizationConfigurationHandler, Albums"/>
</sectionGroup>
J'imagine que le code interne de GetSection essaie de charger Albums.dll dans le "LoadFrom" contexte et donc de provoquer un conflit avec l'original Albums.dll chargé dans le /bin chemin (voir le contexte des problématiques de)
Je note aussi que d'autres dll /MagickECB/Bin également de référence Albums.dll, donc je la reconstruction de tous les projets, de sorte que toutes les DLL de référence de la même version de Albums.dll
Dernier, si vous cochez la dll chemin d'accès complet dans les fichiers Temporaires, les extensions sont différents (majuscules vs minuscules)..
Toutes les suggestions sur la façon de résoudre ce problème serait grandement apprécié !!
OriginalL'auteur Breakdown | 2010-11-08
Vous devez vous connecter pour publier un commentaire.
Double-vérifier vos références, si vous comparez vos deux dll endroits qu'ils sont différents (extension en majuscules vs minuscules n'est pas un problème):
Temporaire ASP.NET Files\magickecb\4414db97\126f5aaf\assembly\dl3\ cf281292\4a6ecec8_8a7bcb01 \Albums.DLL
Temporaire ASP.NET Files\magickecb\4414db97\126f5aaf\assembly\dl3\ 017fab88\a91238d1_7977cb01 \Albums.dll
Signifie probablement que vous faites référence à deux fichiers différents - peut-être que le référencement comme un projet et l'autre directement dans un fichier. Avez-vous des avertissements lorsque vous essayez de construire votre application web qui concerne les références?
EDIT:
__AssemblyInfo__.ini
fichier dans les dossiers ci-dessus vous donnera le chemin à partir de laquelle Albums.dll avait été copié.Je pensais à Albums.dll - comment est-ce référencés dans les deux projets? Est que votre projet?
Oui, les deux sont mes projets. J'référence Albums.dll (qui est la sortie de la racine du projet) dans le sous-projet par le biais du Projet de référencement. C'est ce que tu voulais savoir ? (Pas de C/P, dans le sous-projet d'application de la corbeille)
OK, avez-vous identifié peut-être quand est-ce arrivé? Vous avez dit au hasard, mais se pourrait-il que c'est seulement après IIS redémarre, ou demande n'est pas utilisé pendant un certain temps, ou après la piscine du recyclage, de la reconstruction de la demande ... ? Vous pourriez aussi essayer de déplacer les Albums.LocalizationConfigurationHandler dans un projet distinct et de référence à partir de racine et de sous-projet.
Un point qui m'intrigue, c', ces deux fichiers (Album.dll) sont en magickecb sous application, donc vous devez être en quelque sorte deux fois - référence + une autre façon - encore en train de penser à la façon dont cela pourrait se produire. C'est l'appel: le retour (LocalizationConfiguration)ConfigurationManager.GetSection("Localisation/Localisation"); racine de l'application ou de la sous application?
OriginalL'auteur Mihailo
Sans avoir une explication de votre problème, je vous propose de vous inscrire à l'assemblée, à la GAC et de l'utiliser à partir de là.
OriginalL'auteur MatthiasG