TBarCode .NET 常见问题
桌面应用部署后出现 Bad Image Format 异常
桌面应用部署后出现 Bad Image Format 异常
以下内容适用于 11.15 之前的 TBarCode .NET 版本。
部署您的 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.
导致此问题的原因:在开发阶段,您引用的是该 DLL 的 32 位版本。而在部署时,该 EXE 以 64 位进程运行,无法加载(32 位的)TECIT.TBarCode.dll。
背景信息:
由于需要加载本机库,TECIT.TBarCode.dll 是与平台相关的,并未标记为 CPU=Any。在开发计算机上,由于 Visual Studio 是 32 位应用程序,程序通常以 32 位进程运行。但即使进程以 64 位方式运行(无论是 CPU=Any 还是 CPU=x64),它仍然可以从 GAC 以及 program files/common files 文件夹中加载所需的 DLL。我们的安装程序会同时安装两个版本(32 位 + 64 位),并扩展搜索路径,因此总能找到相应的 DLL。
而在迁移到目标系统后,由于是托管代码,该可执行文件既可以以 32 位方式运行,也可以以 64 位方式运行。在某些情况下,由于进程会在 32 位和 64 位之间自动切换,或者由于相应 DLL 不在搜索路径或 GAC 中,又或者根本未安装,进程可能无法找到正确的 DLL。
请按以下方式操作——从下列选项中选择一种:
以目标 CPU x86 构建您的 EXE
在 “C:\Program Files (x86)\Common Files\TEC-IT\TBarCode\11*” 文件夹中引用 TECIT.TBarcode.dll,并将 TECIT.TBarcode.dll + TBarCode11.dll + zlib1.dll 复制到您的部署文件夹中。只有在使用二维码的 gzip 压缩时才需要 zlib1.dll。请安装 Microsoft 提供的 x86 版 VCRedist(2015 U3 RC 或更新的 2015-2019 版本)。
以目标 CPU x64(64 位)构建您的 EXE
在 “C:\Program Files\Common Files\TEC-IT\TBarCode\11*” 文件夹中引用 TECIT.TBarcode.dll,并将 TECIT.TBarcode.dll + TBarCode11_x64.dll + zlib1.dll 复制到您的部署文件夹中。只有在使用二维码的 gzip 压缩时才需要 zlib1.dll。请安装 Microsoft 提供的 x64 版 VCRedist(2015 U3 RC 或更新的 2017–2026 版本)。
以目标 CPU Any 构建您的 EXE
在编程时,请在 “C:\Program Files (x86)\Common Files\TEC-IT\TBarCode\11*” 文件夹中引用 TECIT.TBarcode.dll。在部署时,请不要将任何 TEC-IT DLL 与您的 EXE 一同复制。从您的部署文件夹中移除 TECIT.TBarCode.dll。而是安装 TBarCode SDK 安装程序,并在功能列表中仅选择 TBarCode .NET 组件——这将把 x86 和 x64 版本同时安装到 GAC 中,并将该 DLL 所在路径添加到 PATH 变量中。由于 GAC 中同时存在 32 位和 64 位版本,TBarCode 程序集将自动加载正确的版本。如果您不想手动执行 TBarCode 安装程序,也可以通过命令行开关实现自动化(静默安装)。请同时安装 Microsoft 提供的 x86 和 x64 版 VCRedist(2017–2026 版本)。