【问题标题】:Getting a BadImageFormatException获取 BadImageFormatException
【发布时间】:2011-03-17 13:40:22
【问题描述】:

我有一些来自 System.AddIn 的插件。但是在运行 AddInStore.Rebuild 时,

string[] warnings = AddInStore.Rebuild(addInRoot);

然后我得到一个警告字符串:

该文件不是有效的二进制文件: D:\AK\AS\ConverterModule\output\AddIns\CompositeFileZip\7z.dll 文件名: D:\AK\AS\ConverterModule\output\AddIns\Composi...

7z.dll 不是插件程序集,而是 CompositeFileZip 插件使用的 7z 文件。我不太清楚重建功能到底在做什么。是否尝试将 7z.dll 添加为插件?

【问题讨论】:

    标签: c# system.addin


    【解决方案1】:

    我不熟悉 System.AddIn 或 7z 组件,但BadImageFormatException 的一个非常常见的原因是尝试加载标记为 64 位(或依赖于本机 64 位 .dll)的程序集) 在 32 位系统上,反之亦然。

    检查您的7z.dll 及其依赖项是否为与您看到BadImageFormatException 的系统相同的架构而构建。您可以在 Visual Studio 命令提示符下通过转储 7z.dll 的标头并查找机器架构来执行此操作:

    C:\Program Files\7-Zip>dumpbin /headers 7z.dll | findstr /i 机器 8664机(x64)

    【讨论】:

    • ...或加载不是 .Net 程序集的程序集。
    • 我明白你的意思。然后我切换到为 32 位构建的 7z.dll,但 BadImageFormatException 仍然存在。这些项目是为“任何 CPU”构建的。
    • 无赖。如果没有其他建议出现并且是我,我将启用 .NET Framework 源代码调试,并将调试器设置为在引发异常时中断。然后您可以在引发 BadImageFormatException 的地方查看详细信息。有关启用 .NET FW 源代码调试的详细信息,请参阅 this link。要在引发异常时立即中断,请转到 Debug | VS 中的异常,然后选中 Common Language Runtime Exceptions 旁边的 Thrown 复选框。
    • 问题是它没有作为异常抛出,所以没有什么可以捕获的。相反,它作为包含警告的字符串 [] 返回。
    • 您确定它没有在 .NET Framework 内部引发和捕获,然后只是作为字符串返回给您吗?如果是这种情况,那么我上面提到的打破 .NET Framework 内部引发异常的步骤仍然是相关的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2020-10-08
    • 2013-04-01
    相关资源
    最近更新 更多