Občas se stane, že aplikace v .NETu referencuje jinou .DLL, která pracuje jen v 32bit režimu.
Příkladem je např. MS Jet Engine pro práci s Access databází či SqlServerCe.dll pro přístup do SQL Server Compact databází.
Vše funguje dobře, dokud aplikaci nespustíte na počítači s 64bitovým OS. Pak začne aplikace padat, typicky na "BadFormatException".
Visual Studio totiž defaultně kompliluje aplikace tak, že platformu (32bit nebo 64bit) si volí při spuštění adaptivně podle toho, co je na daném počítači dostupné.
Řešení jsou různá podle dané situace:
- Pokud máte přístup ke zdrojákům aplikace,
pak stačí ve vlastnostech projektu na kartě Build přepnout přepínač Plaform target z Any CPU na x86.
POZN: tento přepínač není dostupný u Compact Framework projektů, protože tam se nějakých 64bitů ani neočekává.
- Pokud není výsledná assembly podepsaná,
pak můžete cílovou platformu změnit pomocí utility Corflags.exe
Např. corflags.exe application.exe /32BIT+
Je ověřeno, že toto nastavení funguje i na aplikace, zkompilované pro Compact Framework (výsledné .exe pak běží i na stolních i na kapesních Windows)
Pro situaci, kdy nemáte přístup ke zdrojákům a assembly je podepsaná, řešení neznám.