FAQ TBarCode .NET
Eccezione Bad Image Format dopo la distribuzione di un'applicazione desktop
Eccezione Bad Image Format dopo la distribuzione di un'applicazione desktop
Quanto segue si applica alle versioni di TBarCode .NET precedenti alla 11.15.
Ottenete la seguente eccezione dopo aver distribuito la vostra applicazione Windows Desktop.
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.
Motivo del problema: durante lo sviluppo avete referenziato la versione a 32 bit della DLL. Ora, alla distribuzione, l'EXE viene eseguito come processo a 64 bit e non può caricare TECIT.TBarCode.dll (che è a 32 bit).
Informazioni di contesto:
A causa del caricamento di librerie native, TECIT.TBarCode.dll è specifica della piattaforma e non contrassegnata come CPU=Any. Sul computer di sviluppo di solito eseguite il programma come processo a 32 bit, perché Visual Studio è un'applicazione a 32 bit. Ma anche se il processo viene eseguito a 64 bit (sia con CPU=Any sia con CPU=x64) può comunque caricare le DLL richieste dalla GAC e dalla cartella program files/common files. Il nostro setup installa entrambe le versioni (32 bit + 64 bit) ed estende anche il percorso di ricerca. Quindi troverà sempre le DLL.
Poi, passando al sistema di destinazione, a causa del codice gestito, l'eseguibile può funzionare sia a 32 sia a 64 bit. In alcuni casi il processo non riesce a trovare le DLL corrette perché passa automaticamente da 32 a 64 bit, oppure le DLL non sono nel percorso di ricerca o nella GAC o semplicemente non sono installate.
Procedete come segue – scegliete una delle opzioni sotto:
Compilate il vostro EXE con target CPU x86
Referenziate TECIT.TBarcode.dll nella cartella "C:\Program Files (x86)\Common Files\TEC-IT\TBarCode\11*" e copiate TECIT.TBarcode.dll + TBarCode11.dll + zlib1.dll nella vostra cartella di distribuzione. zlib1.dll è necessaria solo se usate la compressione gzip con codici 2D. Installate il VCRedist x86 di Microsoft (2015 U3 RC o l'edizione 2015-2019 più recente).
Compilate il vostro EXE con target CPU x64 (64 bit)
Referenziate TECIT.TBarcode.dll nella cartella "C:\Program Files\Common Files\TEC-IT\TBarCode\11*" e copiate TECIT.TBarcode.dll + TBarCode11_x64.dll + zlib1.dll nella vostra cartella di distribuzione. zlib1.dll è necessaria solo se usate la compressione gzip con codici 2D. Installate il VCRedist x64 di Microsoft (2015 U3 RC o l'edizione 2017–2026 più recente).
Compilate il vostro EXE con target CPU Any
Per la programmazione, referenziate TECIT.TBarcode.dll nella cartella "C:\Program Files (x86)\Common Files\TEC-IT\TBarCode\11*". Per la distribuzione non copiate alcuna DLL TEC-IT insieme al vostro EXE. Rimuovete TECIT.TBarCode.dll dalla vostra cartella di distribuzione. Installate invece il setup dell'SDK TBarCode e selezionate solo il componente TBarCode .NET dall'elenco funzionalità – questo installerà le versioni x86 e x64 in parallelo nella GAC ed estenderà la variabile PATH con il percorso della DLL. L'assembly TBarCode verrà caricato automaticamente nella versione corretta perché è presente nella GAC sia per 32 sia per 64 bit. Se non volete eseguire manualmente il setup di TBarCode, può anche essere automatizzato applicando switch da riga di comando (installazione silenziosa). Installate sia il VCRedist x86 sia x64 di Microsoft (edizione 2017–2026).