2016-01-19 66 views
1

我試圖從C++/Cli調用C#方法。該方法在ClassLibrary1.dll中定義。我不斷收到以下錯誤:無法從C++/Cli調用靜態C#方法

An unhandled exception of type 'System.MissingMethodException' occurred in Unknown Module.

Additional information: Method not found: 'Int32 ClassLibrary1.Class1.getNum()'.

這裏是我的C++/CLI代碼:

//CppClr.cpp 

#include "CppClr.h" 
#using "ClassLibrary1.dll" 
using namespace ClassLibrary1; 
int main() 
{ 
    System::Console::WriteLine("Start"); 
    int num = Class1::getNum(); 
    System::Console::WriteLine(num); 
    System::Console::ReadLine(); 
} 

我的C#代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ClassLibrary1 
{ 
    public class Class1 
    { 
     public static int getNum() 
     { 
      return 5; 
     } 
    } 
} 
+1

您可能試圖訪問舊版本的C#DLL? –

+2

如果編譯但在運行時失敗,我會說你正在運行錯誤的DLL版本。 – rodrigo

+0

你們都是對的,這是一個老版本! (尷尬)。謝謝,它現在正在工作 – Rana

回答

3

一個MissingMethodException總是被裝錯總成引起在運行時。通常是一箇舊的。

在一個同時擁有C#和C++/CLI項目的解決方案中很容易犯的錯誤。他們有不同的標準,C#程序集被構建到項目的bin \ Debug目錄中,但C++/CLI項目被構建到解決方案的Debug目錄中。您可能已經發現了這一點,通過自己複製C#程序集來修復它,並在更改C#代碼後忘記再次執行它。

只要確保兩個項目建立到相同的目錄。右鍵單擊C#項目>屬性>生成選項卡>輸出路徑設置。將其從「bin \ Debug」更改爲「.. \ Debug」。重複發佈配置。重建並驗證您在解決方案的Debug目錄中看到EXE和DLL的最新副本。