2010-11-25 89 views
1

我目前正在處理與VB .NET(VS 2010和VS 2008)中的一些擴展方法的兼職(和惱人的)錯誤。擴展方法的兼職錯誤

我有一些客戶端項目使用了我爲一般用途創建的「框架」項目中的一些擴展方法。

但是,有時候,當嘗試啓動解決方案時,我收到一長串錯誤,指出擴展方法「不是」目標對象的成員。

發生這種情況時,我可以重建解決方案而不會出現任何錯誤,但是如果我再次啓動該項目,則會再次引發相同的錯誤。

到目前爲止,我有2個解決方法

A)走在擴展方法定義,刪除標籤,編譯(有誤差),把該標籤回去。 B)關閉Visual Studio並重新打開它。

有沒有更好的辦法來解決這個問題?

回答

4

在Connect上有這個問題的active bug report。迫切需要一個repro,一個具有特定步驟的項目,讓他們在內部重現問題。也許你可以提供幫助,解決這個問題或者建議解決方法。

編輯:一個晚了除了這個答案,因爲我已經發布了這裏有其他問題,注意到IntelliSense分析器行爲不同於編譯器的問題。多目標功能存在問題,特別是在VS2010中,由.NET 4的「客戶端配置文件」選項觸發。這是新項目的默認設置。出現問題的是添加需要完整配置文件的程序集引用,通常是因爲依賴於System.Web。你會得到一個警告,但很快就會被大量的錯誤所淹沒。解決方法是將項目的Framework Target從客戶端更改爲完整。

0

與上面列出的兩個相比,耗時較少的工作是「重建解決方案」,而不是使用正常的「生成解決方案」。無論何時我遇到這個問題,這一直都適用於我。

3

我最近遇到了同樣的問題。我的項目將建設得很好,但如果我試圖使用重建選項,我會得到關於我的擴展方法沒有找到他們正在擴展的對象的錯誤。

我已經設法通過使用擴展方法在類的頂部包含一個導入來解決這個問題。

因此,在該文件的頂部其實我有

進口project_name.extension_module

我不知道爲什麼這是必需的,但在我的情況下解決該問題。我希望這可以幫助那些像我一樣浪費了很多時間的人!

Liam

0

我們有一些非常相似的東西。調用擴展merhod擴展了類型A.類型實際上是一個實現接口C的類型B的實例。接口C具有與擴展方法同名的方法。

接口C聲明方法FOO B級從A繼承實現Ç

靜態類 靜態方法foo(此A) 如果A是C (A爲C)包含.foo

調試當就行而言,如果A是C,它實際上會多次調用Foo,並且您可以在彙編級別進行操作,並看到它表示正在進行比較。我們證明調用發生的方式Foo執行一條sql語句,我們可以看到sql profiler執行Foo中的代碼。

變遷爲C反射和錯誤消失。或者使用調試器隱藏/逐步通過並且bug被屏蔽。另外,如果你微步sql profiler顯示查詢被調用多次(在實際調用Foo之前​​)爲每個彙編語句。