我正在尋找一組編譯.net程序集中的特定類的相關源文件。查找編譯類的源文件在c#中
例如
MyAsm.Namespace.Foo -> C:\Source\foo.cs
MyAsm.Namespace.Bar -> C:\Source\Code\MoreCode\Common.cs
MyAsm.Namespace2.Bar -> C:\Source\Code\MoreCode\Common.cs
...
我有裝配反射/提取我感興趣的使用標準System.Reflection
功能工作類型的信息。
我現在需要找到該類的原始.cs源文件。儘管我已經採取了一種蠻力解決方案作爲解決方法,但其速度令人難以接受。
我希望整個過程在5秒內完成。目前,反射提取部分不到1秒,'文件關聯'需要幾分鐘。我不認爲在4秒內掃描幾個MB並不合理。
不幸的是,有一些警告,它可以防止快捷方式。
我不知道該文件的名稱,所以我需要做一個
dir/s *.cs
每次運行時,列舉所有潛在的源文件。該類名不總是匹配源文件,它可以提示在可能的位置,但它不能保證工作。
在某些情況下,多個類在相同的文件中定義。
有~20k .cs文件/ 63MB的源代碼。
我需要一個〜10k的類/他們的文件之間的關聯。
我不想逐步建立一個數據庫,其中聲明的文件名/類,因爲文件內容會改變,我會有維護這個數據庫等的麻煩(雖然我可能要去如果一切都失敗,請下載此路線)。
操作系統的這個將會運行,不會有窗口搜索/索引啓用,所以也沒有喜悅。
我已經試過:
使用的Findstr.exe - 速度過慢
創建.NET應用程序,所有文件加載到內存中。 - 太慢找不到* .cs /加載所有 文件,一旦它們在內存中,就可以快速掃描文件。
從所有較小的文件創建一個大的源文件,加載它,掃描等 - 再次,太慢了。花費幾分鐘的時間來構建文件,一旦加載就快速。
閱讀PDB文件 - 我正在研究PDB2XML.exe,雖然它輸出文件名,並且運行速度很快,但我不知道如何將一個類與文件名相關聯。
那麼,有沒有人有替代建議,魔術或PDB2XML的一些經驗?
如果原始源文件不存在於系統中,該怎麼辦? –
很簡單的事情做的是做類名稱的文件搜索,像發現含有'類\ S +' –
@BenFinkel他們的所有文件。多數民衆贊成在一件事我可以保證 – jasper