FAQ TBarCode .NET
Exception Bad Image Format après le déploiement d'une application de bureau
Exception Bad Image Format après le déploiement d'une application de bureau
Ce qui suit s'applique aux versions de TBarCode .NET antérieures à 11.15.
Vous obtenez l'exception suivante après avoir déployé votre application de bureau Windows.
System.BadImageFormatException: Could not load file or assembly 'TECIT.TBarCode, Version=11.10.0.0, Culture=neutral, PublicKeyToken=1b5f4306b234b83d' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Raison du problème : pendant le développement, vous avez référencé la version 32 bits de la DLL. Maintenant, au déploiement, l'EXE s'exécute en processus 64 bits et ne peut pas charger TECIT.TBarCode.dll (qui est en 32 bits).
Informations de contexte :
En raison du chargement de bibliothèques natives, TECIT.TBarCode.dll est spécifique à la plateforme et n'est pas marquée CPU=Any. Sur l'ordinateur de développement, vous exécutez généralement le programme en processus 32 bits, car Visual Studio est une application 32 bits. Mais même si le processus s'exécute en 64 bits (soit avec CPU=Any, soit avec CPU=x64), il peut toujours charger les DLL requises depuis le GAC et depuis le dossier program files/common files. Notre installation installe les deux versions (32 bits + 64 bits) et étend aussi le chemin de recherche. Elle trouvera donc toujours les DLL.
Puis, lors du passage au système cible, en raison du code managé, l'exécutable peut s'exécuter soit en 32 bits, soit en 64 bits. Dans certains cas, le processus ne trouve pas les bonnes DLL car il bascule automatiquement de 32 à 64 bits, ou les DLL ne sont pas dans le chemin de recherche ou le GAC, ou ne sont tout simplement pas installées.
Procédez comme suit – choisissez l'une des options ci-dessous :
Compilez votre EXE avec la CPU cible x86
Référencez TECIT.TBarcode.dll dans le dossier « C:\Program Files (x86)\Common Files\TEC-IT\TBarCode\11* » et copiez TECIT.TBarcode.dll + TBarCode11.dll + zlib1.dll dans votre dossier de déploiement. zlib1.dll n'est nécessaire que si vous utilisez la compression gzip avec des codes 2D. Installez le VCRedist x86 de Microsoft (2015 U3 RC ou l'édition 2015-2019 plus récente).
Compilez votre EXE avec la CPU cible x64 (64 bits)
Référencez TECIT.TBarcode.dll dans le dossier « C:\Program Files\Common Files\TEC-IT\TBarCode\11* » et copiez TECIT.TBarcode.dll + TBarCode11_x64.dll + zlib1.dll dans votre dossier de déploiement. zlib1.dll n'est nécessaire que si vous utilisez la compression gzip avec des codes 2D. Installez le VCRedist x64 de Microsoft (2015 U3 RC ou l'édition 2017–2026 plus récente).
Compilez votre EXE avec la CPU cible Any
Pour la programmation, référencez TECIT.TBarcode.dll dans le dossier « C:\Program Files (x86)\Common Files\TEC-IT\TBarCode\11* ». Pour le déploiement, ne copiez aucune DLL TEC-IT avec votre EXE. Supprimez TECIT.TBarCode.dll de votre dossier de déploiement. Installez plutôt le programme d'installation TBarCode SDK Setup et sélectionnez uniquement le composant TBarCode .NET dans la liste des fonctionnalités – cela installera les versions x86 et x64 en parallèle dans le GAC et étendra la variable PATH avec le chemin de la DLL. L'assembly TBarCode sera chargé automatiquement dans la bonne version car il se trouve dans le GAC pour 32 et 64 bits. Si vous ne voulez pas exécuter l'installation TBarCode manuellement, elle peut aussi être automatisée en appliquant des commutateurs de ligne de commande (installation silencieuse). Installez à la fois le VCRedist x86 et x64 de Microsoft (édition 2017–2026).