2009-11-16 65 views
0

當運行一個單元測試,我收到以下異常:MissingMemberException調用C#泛型方法時

試驗方法拋出異常: system.missingMethodException而:方法 未找到:「System.String DataUtilities.HelperMethods .Serialize(!! 0)'..

這隻發生在運行unittest而不是調試它時。當我調試它時,不會發生錯誤。

所調用的方法的簽名:

public static string Serialize<T>(T value) 

的方法是在一個參考DLL。

我注意到以下幾點:在引用的dll中有一個方法將調用包裝爲Serialize(T值)方法。

其代碼:

public static string SerializeList(List<object> list) 
{ 
    TraceClass.Write("something",list); 
    string x = HelperClass.Serialize<List<object>>(list); 
    TraceClass.Write(x); 
    return x; 
} 

如果我把使用這種 「間接」 它工作正常的HelperClass.Serialize。在調試和正常運行模式下。

我在做什麼錯?

回答

0

好的。我真的不知道現在發生了什麼,但它現在正在運行。

我刪除了所有直接引用的項目的所有bin和對象文件夾。所有用於創建測試所需文件夾結構的中間文件夾。 所有舊的Testresult文件夾。

然後重建所有。

現在,它的工作。

在此之前,我已經對所有關心的組件做了這個。顯然這還不夠。

1

我會檢查以確保在運行單元測試時dll不會從其他位置引用。你很可能有一箇舊的dll文件放在測試運行器找到的某個地方,這就是你遇到這個錯誤的原因。

+0

這也是我最初的想法。但是:unittest的out文件夾中引用的dll的日期是最新的。它必須緩存在某處。但爲什麼只用於調試? – StampedeXV

+0

@Stampede我不確定是否誠實。也許它在GAC或其他項目文件夾中? – Joseph

+0

要加入GAC,我必須手動添加afaik,對不對?我從來沒有這樣做過。我很確定。 我在某個論壇上看過,它可能位於Visual Studio的IDE文件夾中,但我在那裏也找不到它。 – StampedeXV