2012-06-12 52 views
3

我有一個C#程序的真正奇怪的問題:Visual Studio的C#編譯器不會注意到一個變化的方法名

我有聲明的方法和實施此接口的類的接口。當我更改方法名稱(在接口和實現中)時,Visual Studio會編譯代碼,但是如果我運行代碼,則會出現method not found異常。如果我手動刪除目標dll並重新編譯項目/解決方案,一切正常。

但是,還有很多其他方法和屬性,也在同一個接口中聲明並在同一個類中實現。如果我改變其中一個的名字,一切正常!

有沒有人有想法,這可能是什麼?

public interface INode{ 
    //... 
    IEnumerable<INode> Ancestors(); 
    //... 
} 
public abstract class NodeBase : INode{ 
    // ... 
    public IEnumerable<INode> Ancestors(){ 

    } 
    // ... 
} 
+1

您是否通過詳細的msbuild輸出獲得了一些信息? –

+1

裝配在不同的項目中嗎?如果是這樣,你是手動添加參考,還是使用「項目」選項卡添加它? – asawyer

+0

@Adriano:我已經啓動了,但還沒有看到什麼特別的東西。不過,這是我第一次看到這個,它真的有很多信息。你能給我提示我應該看什麼嗎? – HCL

回答

2

在試圖解決這個問題,我已刪除的參考,從用戶界面 - 問題組裝項目,然後重新添加。從這時起,問題已經消失

不幸的是,我不能說這個真正奇怪的問題是什麼原因,現在我沒有更多的機會來看待這個問題。 它一定是在項目中被破壞的東西,但我無法想象這會發生什麼,因爲實際上只涉及一個方法簽名(獨立於代碼中的位置和方法的名稱)。

感謝迄今爲止發佈答案的任何人(+1),讓我找到了解決方案。我希望我再也不會看到這種奇怪的行爲! 對於那些有同樣問題的人:嘗試重新創建對發行項目的引用。

+0

當引用被添加爲不是通過項目選項卡的dll時,可能會發生這種情況,並且可能非常令人困惑。 – asawyer

+0

@asawyer:引用是通過項目選項卡添加的。有趣的是,只有一個方法簽名成了問題。相同文件中的所有其他更改都已正確編譯!這真的很奇怪。自.NET的第一個版本以來,我沒有見過這樣的事情! – HCL

+0

瘋了。如果我在辦公室看到它,我已經收藏了這個。 – asawyer

1

您是否嘗試過使用Build> Clean Solution/Project?

+0

是的,也是解決方案。不用找了。但謝謝你的回答。 – HCL

1

我得到這個問題,所有的時間...

我平時保存,關閉VS,打開該解決方案備份,然後再建。這個過程將問題暫時擱置一段時間。

當您「清理」解決方案時,它會刪除與解決方案相關的所有編譯和臨時文件。它確保下一次構建將從頭開始。

我相信問題在於VS沒有正確地構建解決方案,並且有些東西會「卡住」。我也相信有VS的擴展可以幫助解決這個問題。

這篇文章也許是你所需要的有點極端,但你會發現它有用:http://www.neovolve.com/post/2010/08/02/Cleaning-a-VS2010-solution-with-a-sledgehammer.aspx

相關問題