【问题标题】:visual studio 2010 'System.BadImageFormatException' when adding controls via designer通过设计器添加控件时,visual studio 2010 'System.BadImageFormatException'
【发布时间】:2012-10-02 13:18:44
【问题描述】:

我在 Visual Studio 2010 Ultimate 中工作,但在将某些控件添加到我的 Windows 窗体时遇到问题。我在同一个解决方案中有两个项目,PeakEstimator 和 PeakEstimatorUI。 PeakEstimatorUI(我的 GUI)依赖于 PeakEstimator(我的后端),并且一切都可以使用我目前拥有的表单和控件按预期编译和运行。

但是,当我尝试添加某些控件时,我现在遇到了问题。 TextBoxes、Buttons、Labels、OpenFileDialog 控件和许多其他东西都可以正常工作,但是当我尝试添加 Chart、LineShape、OvalShape、ReportViewer、ElementHost 等时,我收到以下错误:

未能创建组件“组件名称”。错误消息如下:'System.BadImageFormatException:尝试加载格式不正确的程序。 (来自 HRESULT 的异常:0x8007000B)'

我一直在寻找类似的问题,并且我看到的大多数线程都在谈论 x86 与 x64 问题,但我的印象是使用 clr 可以为我处理这些问题。也许我在那里有一个根本的误解。

如果我创建一个新的 Windows 窗体项目,我遇到的所有控件似乎都可以正常工作,因此我认为它一定与我的项目配置有关。有什么想法吗?

这是我第一次开发任何类型的严肃的 GUI 或使用 Visual Studio,这是我很长时间以来第一次在 Windows 中编程,所以请像我 5 岁一样解释它。

感谢您的宝贵时间,

戴夫

【问题讨论】:

    标签: winforms visual-studio-2010 visual-c++ clr


    【解决方案1】:

    当您尝试将 32 位 DLL 加载到 64 位应用程序时,通常会出现此错误。在您的环境中可能吗?

    如果您有外部依赖项并且只有 .DLL 文件,则可以使用 Visual Studio 命令提示符查看它是否为 32 位:corflags myReference.dll。您正在寻找32BIT 标志。如果它是您可以控制的,请检查项目/解决方案以确保它设置为为AnyCPU 而不是x86 构建(注意:如果它执行 COM 互操作或使用另一个 32 位程序集,则可能需要 x86)。

    如果您在 64 位计算机上并且有一个设置为 AnyCPU 构建配置的解决方案并尝试随后加载 32 位程序集,则会引发此异常。您可以将解决方案更改为针对 x86 构建,这应该可以解决问题。

    更多资源:

    【讨论】:

    • 感谢您回答杰夫。从 anyCPU 切换到 x86 是否会对兼容性产生不利影响?
    • 它会沿着链条向下遍历。这就是为什么如果可能的话,我更愿意留下它AnyCPUx86 可以使用 AnyCPU 程序集,但反之则不行。因此,无论您的启动项目是什么,最终都可能必须是x86。如果这最终成为正确答案,请随意将其标记为答案,以便其他人知道此问题已得到解答(当然,除非您正在寻找更好的答案;)
    • BTarb 的答案实际上是解决我的问题的解决方案,所以我选择了那个作为我接受的答案。杰夫感谢您抽出宝贵时间。你帮了大忙!
    • 不客气! (哇,我没有注意,也没有意识到这是针对 C++ 的,我制作的 cmets 用于编译为 IL 以在 .NET Framework CLR 上运行的代码......所以可能不适用于 C++为机器编译的程序。对不起!)
    【解决方案2】:

    抱歉,我最初的回答是针对 C#。

    对于 C++,您需要查看 /CLRIMAGETYPE。这是 MSDN,它解释了它的工作原理以及在 VS2010 中的设置位置:

    http://msdn.microsoft.com/en-us/library/31zwwc39(v=vs.100).aspx

    这是属性页面的屏幕截图。我不确定要更改为哪个值,但您可以尝试看看哪种值适合您。

    【讨论】:

    • 也许我们使用不同的版本?我的属性对话框中没有“构建”选项卡。我对视觉工作室还是很陌生。
    • 我最初的答案是 C#,抱歉。我修改了我的答案以针对 c++。
    • 此解决方案有效。我遇到问题的所有控件现在都可以正常工作。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多