2013-10-08 57 views
1

我以爲我知道這個答案,我知道它是從反射引用的庫。不過,我有一種情況,我試圖調試一個C#程序,使用第二個參考程序,用VB.NET編寫(也就是說,我試圖用C#重寫VB.NET程序)。元數據來自.NET(Visual Studio 2012)

我正在查看的特定代碼使用了一個引用類,而我的C#程序的F12(進入定義)將對象元數據加載到一個新窗口中;然而,VB.NET程序中的相同動作將我帶到對象瀏覽器,聲稱引用的dll位於不同的位置(它們都引用相同的庫)。

在這樣的中心方面,這兩種語言可能有不同的表現嗎?還是有另一部分引用一個我不知道的庫?

+0

可能發生的事情是C#程序在PDB所在的目錄中引用DLL。調試器正在加載PDB,因此知道源文件在本地計算機上的位置。 VB程序也沒有這樣做。或者,也許你有一個可以爲你分解的插件,它只適用於C#應用程序。 Visual Studio不會拆卸插孔。 – Will

+0

您的程序集元數據和調試信息令人困惑。元數據爲兩者加載 - 它始終加載。它是CLI程序集的基礎部分。 – asawyer

+0

引用程序集的目錄沒有PDB文件。此外,這是設計時間(即在程序未運行時按F12)。 –

回答

2

當IDE知道該代碼並且IntelliSense解析了它時,轉到定義只能將您帶到實際的源代碼。如果項目不是同一種解決方案的一部分,或者沒有用同一種語言編寫,那麼這是不可行的。程序集引用僅提供嵌入程序集中的元數據。其中只描述了類型,而不是代碼。除了通過IntelliSense未使用的調試器的PDB文件之外,沒有鏈接到生成它的原始源代碼,因爲不能依賴它來呈現和準確。

是的,C#IDE和VB.NET IDE使用不同的方法來解決這個問題。否則就會產生兩個完全不同的團隊的副作用,而他們的IDE演進缺乏共同性。 Visual Basic已經有幾十年的IDE支持,C#是該塊的新成員,並且它背後的團隊需要在13年前從零開始。

VB.NET IDE確實突出顯示了對象瀏覽器中的標識符,它是15年前完成的方式。 C#IDE具有代碼,可將彙編元數據反編譯爲可讀的C#代碼,並在編輯器窗口中顯示生成的文本。確切地說,C#團隊爲什麼不選擇VB.NET方法當然只能由知情人知道。