C# NUnit C对非托管dll使用DllImport会引发BadImageFormatException

C# NUnit C对非托管dll使用DllImport会引发BadImageFormatException,c#,unit-testing,nunit,unmanaged,C#,Unit Testing,Nunit,Unmanaged,事实上,我是一个新手,一般来说,我会将其应用于单元测试,我正在尝试为我正在做的一件小事编写一些测试 我正在尝试为libspotify编写一个包装器库 我尝试测试的一个例子是: /// <summary> /// The connection state of the specified session. /// </summary> /// <param name="sessionPtr">Pointer to Session

事实上,我是一个新手,一般来说,我会将其应用于单元测试,我正在尝试为我正在做的一件小事编写一些测试

我正在尝试为libspotify编写一个包装器库

我尝试测试的一个例子是:

    /// <summary>
    /// The connection state of the specified session.
    /// </summary>
    /// <param name="sessionPtr">Pointer to Session object</param>
    /// <returns>The connection state - see the ConnectionStateE enum for possible values</returns>
    [DllImport("libspotify")]
    internal static extern ConnectionStateE sp_session_connectionstate(IntPtr sessionPtr);

    /// <summary>
    /// The connection state of the session
    /// </summary>
    public ConnectionStateE GetConnectionState()
    {
        __CheckIsNotDisposed();
        return sp_session_connectionstate(this.Ptr);
    }
诚然,这项测试可能不是最有用的,但目前这并不重要。我遇到的问题是,当我尝试运行测试时,它会显示以下异常:

    SpecTests.TestSessionBasics.TestSessionInitializeDisconnected:
    System.BadImageFormatException : An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
我猜我在这里忽略了一些东西,但谷歌搜索并没有真正起到作用,因为我似乎只找到测试c++/cli的结果或其他没有真正帮助的结果


任何帮助都将不胜感激。谢谢。

解决方案是运行NUnit的32位二进制文件,而不是64位二进制文件,64位是x64机器上的默认值

原因是我使用的外部库显然是为x86 32位编译的,因此不能很好地处理来自64位环境的代码调用


正如@HansPassant所提到的,解决方案来自以下问题:

您使用的是哪种.net平台x86或x64?您是否设法运行了代码(例如,从控制台应用程序运行代码)?在项目属性中,平台设置为任何CPU-我的计算机是x64。如果有帮助的话,我正在使用VisualStudio 2012。是的。代码在控制台应用程序中工作。这就是我最初测试的方式,现在我想使用NUnitHave。我刚刚在平台设置为x86,再次设置为x64的情况下尝试了它。虽然当我将平台设置为x86时,其他一些不使用dllimported方法的测试失败,但这两种方法都不起作用
    SpecTests.TestSessionBasics.TestSessionInitializeDisconnected:
    System.BadImageFormatException : An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)