Xbox360 und die System.TypeLoadException

Wo soll man ansetzen, wenn das aktuelle Projekt auf der Xbox 360 zur Laufzeit plötzlich TypeLoadExceptions wirft? In vielen Fällen nennt die Fehlermeldung den fehlerverursachenden Typ, so dass sich die Ursache schnell eingrenzen lässt. In manchen Fällen wir die System.TypeLoadException aber auch ohne weitere Angaben ausgelöst, außerdem, so passiert bei der Portierung von ScriptDotNet auf die Xbxo 360:

Parser.cs (Zeile 241):  object rez = cnd.evaluate(Context);
System.TypeLoadException: TypeLoadException
   at ScriptDotNet.IfStatement.Execute(ScriptContext Context)
   at ScriptDotNet.JsProg.Execute(ScriptContext Context)
   at ScriptDotNet.JsProg.Execute(ScriptContext Context)
   at ScriptDotNet.JsProg.Execute(ScriptContext Context)
   at ScriptDotNet.Script.Execute()

Die betroffene Codezeile selbst löst die Exception nicht aus und minimale Änderungen am Code verlagern die Exception an völlig andere Stellen.

Meist ist die System.TypeLoadException ohne konkrete Angabe eines fehlerhaften Types ein Hinweis auf Probleme mit referenzierten Assemblies. Oft referenzieren von einander abhängige Projekte die gleichen Assemblies – bzw. die „gleichen“ aber dann doch in unterschiedlichen Versionen. Besonders wenn das Compact Framework ins Spiel kommt bzw. das Compact Framework for Xbox 360 kann es schnelle zu mehrfachen Referenzierungen des gleichen Assemblies in unterschiedlichen Versionen kommen.

Beim Testen auf einem PC treten in dieser Situation keine Probleme auf, da Windows verschiedene Versionen eines Assemblies problemlos verwaltet. Auf der Xbox 360 steht dann allerdings nur noch die CF for Xbox 360 Version des Assemblies zur Verfügung und es kann zur TypeLoadException kommen.

Das Überprüfen der Referenzen eines Projekts kann in vielen Fällen das Auftreten von System.TypeLoadExceptions verhindern.

free pokereverest poker revie
Copyright 2013 FZI Karlsruhe, alle Rechte vorbehalten