C# - Typ A kann nicht gegossen werden zu Typ B ( InvalidCastException)... Kontext Hölle?
Ich habe ein sehr unangenehmes Problem mit meiner webapp.
Die app ist so konzipiert wie folgt :
- Die root-App ist das laden einer Flex SWF, das wiederum lädt ein 3rd-party-Flex-SWF-Modul in einer sub-app (MagickECB).
- Beide Apps Referenz Albums.dll, dll gefunden in /bin und /MagickECB/bin und beide Apps haben den gleichen Anwendungspool in IIS.
BEARBEITEN : Das sind zwei Projekte, die root-app-Projekt und die subapp-Projekt. Subapp Projekt-Referenz root-app-Projekt.
Beim laden der sub-app-flex-Modul aus dem root-app flex-Anwendung, die wir zufällig bekommen, ein cast-Fehler wie folgt :
Es wurde ein Fehler bekommen
die Konfiguration des Fotobuchs:
[A]Alben.LocalizationConfiguration
kann nicht umgewandelt werden
[B] - Alben.LocalizationConfiguration.
Typ A entsteht aus 'Alben
Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null " im Kontext
'Standard' an Position
'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary
ASP.NET
Dateien\magickecb\4414db97\126f5aaf\assembly\dl3\cf281292\4a6ecec8_8a7bcb01\Albums.DLL'.
Typ B stammt aus " die Alben,
Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null " im Kontext
'LoadFrom' an Position
'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary
ASP.NET
Dateien\magickecb\4414db97\126f5aaf\assembly\dl3\017fab88\a91238d1_7977cb01\Albums.dll'.
bei
Alben.LocalizationConfiguration.GetConfig()
bei Alben.CGlobal.GetUserLocale(String
userHandle)
Versuchen, dieses Problem zu untersuchen, fand ich heraus, das GetConfig-Methode verursacht die cast-Fehler zurückgegeben
return (LocalizationConfiguration)ConfigurationManager.GetSection("Localization/Localization");
Den Abschnitt in der Web.config deklariert ist wie folgt : (BEARBEITEN : root-app ' s web.config)
<sectionGroup name="Localization">
<section name="Localization" type="Albums.LocalizationConfigurationHandler, Albums"/>
</sectionGroup>
Meine Vermutung wäre, dass der interne code der GetSection-versucht zu laden Albums.dll in der "LoadFrom" Kontext und sind daher zu einem Konflikt mit den original Albums.dll geladen in den /bin-Pfad (siehe Kontext-Problematik)
Ich auch beachten Sie, dass andere dlls in /MagickECB/Bin auch Referenz-Albums.dll also ich Baue alle Projekte, so dass sich jede DLL-Verweis die gleiche version von Albums.dll
Letzte, wenn Sie die dll-vollständigen Pfad in Temporären Dateien, die Erweiterungen sind verschiedene (groß-vs. Kleinschreibung)..
Alle Eingaben auf, wie dieses problem zu lösen, wäre sehr dankbar !!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie Ihre Referenzen, wenn Sie sich den Vergleich der beiden dll Orten, die Sie unterschiedlich sind (Erweiterung der Großschreibung vs. Kleinschreibung ist kein Problem):
Temporäre ASP.NET Dateien\magickecb\4414db97\126f5aaf\assembly\dl3\ cf281292\4a6ecec8_8a7bcb01 \Albums.DLL
Temporäre ASP.NET Dateien\magickecb\4414db97\126f5aaf\assembly\dl3\ 017fab88\a91238d1_7977cb01 \Albums.dll
Wahrscheinlich bedeutet, dass Sie verweisen auf zwei verschiedene Dateien - vielleicht auf eine, wie ein Projekt und die anderen direkt als Datei. Hast du irgendwelche Warnungen, wenn Sie versuchen, den Aufbau Ihrer web-Anwendung zu verweisen?
EDIT:
__AssemblyInfo__.ini
Datei in oben genannten Ordner geben Sie den Pfad, von dem Albums.dll war kopiert.Zimmerreserviereung, ohne das Sie eine Erklärung für dein Problem würde ich vorschlagen, registrieren Sie die assembly in den GAC und verwenden Sie es von dort.