Beschreibung
Beim Umstellen einer MFC-Anwendung auf C++/CLI kam nach erfolgreicher Kompilierung beim Start eine .NET-Fehlermeldung System.TypeLoadException
, mit Fehlercode 0x80131522
.
Ursache
Genau kenne ich die Ursache nicht, verschiedene Berichte/Postings deuten darauf hin, dass es ein Fehler mit dem Assembly Loader ist, der die Anwendung initial startet.
Scheinbar gibt es eine Begrenzung diverser Ressourcen in der Sektion globaler Symbole. Dass dies tatsächlich ein Grund sein könnte zeigte die riesige Dateigröße von 66 MB für die eigentliche Anwendung (früher, ohne C++/CLI war diese 30 MB groß).
Lösung
Die eigentliche, für mich passende, Lösung wurde hier beschrieben:
Ich habe das sogenannte „String Pooling“ in meinen Visual C++-Projekteinstellungen aktiviert. Danach war die kompilierte Anwendung noch 8 MB (statt 66 MB) groß und der Fehler trat beim Laden nicht mehr auf.
Weitere ggf. nützliche Ressourcen:
- Thread „Mixed c++ TypeLoadException Internal limitation: too many fields“ im MSDN-Forum
- Google Groups-Eintrag „CCW and 0x80131522“
- Weblogeintrag „Debugging a MissingMethodException, MissingFieldException, TypeLoadException“