0

最近几天我接触了 .NET Framework,尤其是 Visual Basic 编程语言。今天出现了一个我无法解决的异常。这是一个 BadImageException - 当然,我向我最好的朋友 Google 寻求一些支持。从我提取的结果中,由于平台错误(x86 与 x64),这似乎是一个错误。所以我检查了这些设置,因为我可以得到它们被设置为“任何 CPU”(显然这必须意味着 x64 和 x86),所以它可能不是我的错误的根源。有没有人有另一个想法如何解决它?

VB 部门似乎比 Java 和 C++ 部门小得多,但我希望任何人都可以帮助我。会让我高兴,我期待着你的答案。

对不起,我忘记了这个。我正在使用 Childkat.ftp2 连接到 ftp 服务器。

ftp As New Chilkat.Ftp2
Try 
    success = ftp.Connect() 
    If (success <> True) Then 
        Dim failReason As Integer 
        failReason = ftp.ConnectFailReason 
        MessageBox.Show(ftp.LastErrorText) 
        End 
    End If 
Catch e As BadImageFormatException 
End Try 
4

3 回答 3

1

当您依赖于标记为 x86 或使用本机 32 位代码的程序集时,也会引发此异常。这个 Chilkat 组件很有可能具有这样的设置或依赖关系。他们从 ActiveX 控件开始,这种控件通常用 C++ 编写。发布它的 .NET 版本很容易,围绕 C++ 代码编写 .NET 包装器在最初是 ActiveX 时并不难。然而,完全重写它以使其使用托管代码是一项重大投资。所以他们可能没有这样做。

只要你使用这个组件,你就不能使用 AnyCPU。右键单击您的 EXE 项目,属性,编译选项卡,向下滚动。单击 Advanced Compile Options 按钮并将 Target CPU 设置从 AnyCPU 更改为 x86。如果这让您感到困扰,请联系供应商并要求提供 64 位版本。它不应该。

于 2013-06-06T12:12:59.723 回答
0

您部署的 ChillKat DLL 可能是针对旧版本的 dot net 框架构建的,而不是您使用的。在我的开发机器上更新库并忘记更新生产中的相应版本时,我已经看到了这一点。

当动态链接库(.dll 文件)或可执行文件(.exe 文件)的文件格式不符合公共语言运行库预期的格式时,将引发此异常。特别是,在以下情况下会引发异常:

早期版本的 .NET Framework 实用程序(例如 ILDasm.exe 或 installutil.exe)与使用更高版本的 .NET Framework 开发的程序集一起使用。

若要解决此异常,请使用与用于开发程序集的 .NET Framework 版本相对应的工具版本。这可能需要修改 Path 环境变量或提供正确可执行文件的完全限定路径。

尝试加载非托管动态链接库或可执行文件(如 Windows 系统 DLL),就好像它是 .NET Framework 程序集一样。

请参阅http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx

于 2013-06-06T11:45:29.293 回答
0

对于通过谷歌进来的其他人,我发现这个链接很有用:

http://blogs.msdn.com/b/distributedservices/archive/2009/06/17/badimageformatexception-or-typeinitializationexception-when-using-mixed-mode-vc-dlls-in-managed-services-applications.aspx

我的问题是对已在 .NET4 中编译的托管 dll 的 COM 引用,试图通过在 .NET2 中运行的用户控件加载。Windbg 非常有用,因为 COM 引用隐藏在我没有来源的第 3 方 dll 中。

于 2014-03-07T08:20:06.297 回答