簡體   English   中英

NUnit C#使用DllImport的非托管dll引發BadImageFormatException

[英]NUnit C# using DllImport for an unmanaged dll throws BadImageFormatException

我是NUnit的新手(實際上是一般的單元測試),我正在嘗試為我正在研究的一些小事情編寫一些測試。

我正在做的是嘗試為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);
    }

然后測試本身(在一個單獨的項目中,相同的解決方案)

    [Test]
    public void TestSessionInitializeDisconnected()
    {
        using (var sess = new Session())
        {
            Assert.AreEqual(sess.ConnectionState, myLibSpotify.Enums.ConnectionStateE.DISCONNECTED);
        }
    }

誠然,該測試可能不是最有用的,但目前尚不相關。 我遇到的問題是,當我嘗試運行測試NUnit時,顯示了以下異常:

    SpecTests.TestSessionBasics.TestSessionInitializeDisconnected:
    System.BadImageFormatException : An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

我猜我在這里已經忽略了一些東西,但是Google搜尋並沒有真正的幫助,因為我似乎只是為了測試c ++ / cli或其他沒有真正幫助的結果而找到了結果。

任何幫助,將不勝感激。 謝謝。

解決方案是運行NUnit的32位二進制文​​件,而不是x64機器上默認的64位。

我使用的外部庫的原因顯然是針對x86(32位)進行編譯的,因此無法與從64位環境中調用的代碼很好地配合使用。

正如@HansPassant所提到的,解決方案來自以下問題: 64位計算機上的nUnit異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM