BadImageFormatException bei .NET Web Applikationen

Web Applikationen werden während der Entwicklung in Microsoft Visual Studio häufig mit dem integrierten Web Server “IIS Express” ausgeführt, der standardmäßig als 32-bit Prozess gestartet wird.

Die Projekte werden dabei in Visual Studio als “Any CPU” erstellt, was bedeutet, dass die Web-Applikation zur Laufzeit beide Plattformen - x86 wie auch x64 - unterstützt. Beim Ausführen der Web Applikation kann es zu einer Ausnahme ‘System.BadImageFormatException’ kommen, wenn die List & Label .NET Komponenten als Referenz (bspw. via NuGet) hinzugefügt wurden:

Die Datei oder Assembly “combit.ListLabel[??]” oder eine Abhängigkeit davon wurde nicht gefunden. Es wurde versucht, eine Datei mit einem falschen Format zu laden.

Typisches Beispiel:

Hintergrund, Erklärung und Lösung
List & Label stellt die .NET Komponenten natürlich als Any CPU zur Verfügung. Doch besteht hierbei die folgende Besonderheit: die .NET Komponenten von List & Label benötigen native Module von List & Label, die sowohl als x86- als auch als x64-DLLs zur Verfügung stehen. Wird Any CPU gewählt, werden die unmanaged Module dann auch sowohl als x86 als auch als x64 in den Ausgabeordner der Applikation kopiert. Eine Übersicht der Module findet sich in der Datei Redist.txt. Details zur Redistribution finden sich in der .NET Hilfe unter Deployment.

Der IIS(-Express) führt zur Performanceoptimierung allerdings ein sog. Preloading aller Module durch, stößt dabei dann zwangsläufig auf die Mischung aus x86 und x64 Modulen und quittiert dies mit der o.a. Fehlermeldung.

Bei Web-Anwendungen gilt daher: damit die Applikation ausgeführt werden kann, muss die Bitness der Applikation in Visual Studio bzw. dem verwendeten IIS Express zusammenpassen. Das kann entweder generell für die Visual Studio Installation konfiguriert werden oder aber auch spezifisch für das Web Projekt:

Global für Visual Studio
In den Optionen unter Extras > Optionen > Projekte und Projektmappen > Webprojekte kann eingestellt werden, mit welcher Plattform der IIS Express ausgeführt werden soll:

Projektspezifisch
In den Eigenschaften des Projektes unter Projekt > Eigenschaften > Web > Server kann eingestellt werden, mit welcher Plattform der IIS Express ausgeführt werden soll:

Hinweis: Bitte beachten Sie die Informationen auch, wenn die Web Applikation abschließend veröffentlicht wird, da auch hier der IIS-Prozess bzw. der verwendete Anwendungspool mit einer bestimmten Plattform - x86 oder x64 - ausgeführt wird.

Links:
Exception beim Start einer .NET-Applikation