2011-09-26 40 views
1

在對.NET程序集進行混淆的過程中(使用Dotfuscator),我發現自己調整了對事件的重命名方式。這通常涉及在ILDASM中查看程序集並將類型追溯到定義的源代碼文件中。如何使用Visual Studio在源代碼文件中找到匿名類型

通常這是一個簡單的過程。但是我發現定位匿名類型非常困難 - 特別是在大型組裝中。

如果我試圖找到一個匿名類型,位置,如下面的代碼行:

new { Name = 'Gene', Age = 30 } 

這是編譯爲:

<>f__AnonymousType0`2'<'<Name>j__TPar','<Age>j__TPar'>` 

,並顯示爲根ILDASM樹中的程序集。

如果我想定位在源代碼中的匿名類型,我離開沒有太大的幫助:

  • 沒有命名空間
  • 沒有符號對
  • 在解決方案導航
  • 沒有搜索
  • Class View中沒有內容
  • Object Browser中沒有內容

我錯過了什麼嗎?是否有任何工具可以幫助在代碼文件中找到匿名類型?

+0

現在經過這一天的工作,我發現如果我提供「在文件中查找」搜索查詢就像'new {Name ='我可以找到我大部分時間都在尋找的東西。 –

回答

3

很明顯,匿名類本身的代碼並不存在於原始源代碼中,但有源代碼會導致匿名類的創建,我假設這就是你想要找到的。但是,可能有多個涉及的源文件。

例如,在你的榜樣,有可能是:

Class1.cs: 
    var x = new { Name = "Jon", Age = 10 }; 

Class2.cs: 
    var y = new { Name = 100, Age = 10m }; 

// And potentially many other source files 

這兩項都會使用相同的通用類型,但不同類型的參數。基本上,您需要按相同的順序使用相同的屬性名稱查找每個匿名對象創建表達式。如果元數據中沒有任何內容可以直接幫助您,我不會感到驚訝。

編輯:生成的代碼將包含對匿名類型的構造函數的引用,當然 - 所以你可以找那個。目前尚不清楚你使用的是什麼工具,但是在IL中搜索匿名類型的名稱會使用這些用法。

+0

我們清楚地解釋了這個問題的不同之處。 – jason

+0

@Jason:可以。我正在考慮負責生成匿名類型的源代碼。畢竟,編譯器不會隨心所欲地做到這一點。該類的代碼不可用於源代碼形式,但*有*源代碼可導致該類被生成......並且如果匿名類型中的名稱發生更改,則該源代碼將*有效*受影響。 –

+0

@Jon @Jason:我會考慮澄清我的問題。我想要的是找到所有用法的工具或技術:'new {Name =?,Age =? }當它們存在於一個程序集中時 - 它們在哪個文件中,它們在哪一行等等。 –

相關問題