【问题标题】:Unhandled Exception: System.BadImageFormatException: Could not load file or assembly未处理的异常:System.BadImageFormatException:无法加载文件或程序集
【发布时间】:2015-02-01 13:47:06
【问题描述】:

我正在为 QT 4.5 中开发的 dll 开发 C++/CLI 包装器。我只有 QT dll 及其头文件。 QT dll 是 32 位 dll。

当我尝试从我的 C# 控制台应用程序调用我的 C++/CLI 包装器时,我看到了 BadImageException。

using GWrapper;

 class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("WELCOME");

            GWrapper wrapper = new GWrapper();

            wrapper.CallAMethod(someText);
        }

   }

如果我只保留Console.Writeline("WELCOME") 也不例外

我使用的是 64 位 Windows 7,并希望将 x86 作为首选选项,因为应用程序也需要在 64 位系统上运行。

项目设置

C++/CLI 中的包装器 - Win32

C# 控制台应用程序 - x86

CORFLAGS 的输出

C++/CLI 包装器(输出是一个 DLL,并引用一个 32 位 QT dll)

版本:v4.0.30319

CLR 标头:2.5

PE : PE32

CorFlags:16

只有:0

32位:0

签名:0

我将 DLL 的 32 位标志设置为 1,但异常仍然存在。当我重建 dll 时,它又被设置为 0。

C# 控制台应用程序(输出为 EXE)

版本:v4.0.30319

CLR 标头:2.5

PE : PE32

CorFlags : 3

只有:1

32位:1

签名:0

如何使控制台应用程序与包装器一起工作?

【问题讨论】:

  • 你检查了吗msdn.microsoft.com/en-us/library/…列出了一些可能的原因。
  • 我试过了,但是程序启动时抛出异常
  • 您确定您没有将控制台应用程序编译为ANY CPU?如果确定两个项目都编译为c# --> x86c++/cli --> Win32,您是否仔细检查了配置管理器
  • 终于我成功了。这不是因为架构,而是因为缺少 QT dll。这种例外有时会产生误导。感谢您的所有 cmets。

标签: c# visual-studio-2010 qt c#-4.0 c++-cli


【解决方案1】:

当程序找不到 dll 或其其中一个依赖项时会发生这种情况。
大多数情况下,在混合原生托管项目中,缺少的依赖项是未在构建过程中复制的原生 dll。

引用的 .Net 库通常会复制到输出编译目录,而默认情况下 Visual Studio 不会复制本机依赖项。

【讨论】:

  • Yochai,谢谢,我解决了,请看我之前的评论。在我的情况下你是正确的,但有时当配置不同时,例如一个是 x86 而另一个是 x64 ,那么也会抛出这个异常。
猜你喜欢
  • 2022-09-30
  • 1970-01-01
  • 2013-01-17
  • 2019-02-11
  • 1970-01-01
  • 2022-11-11
  • 2011-07-10
  • 1970-01-01
  • 2010-09-24
相关资源
最近更新 更多