2014-01-22 24 views
1

我可以使用像「dumpbin」和「dll export」這樣的工具來查看標準Win32 DLL的公共入口點(「出口」),如Windows \ SYSTEM32 \ GDI32.dll。但是,當我使用同樣的工具.Net的DLL中我看到的是一樣的東西如何獲得.Net DLL的公共導出列表?

2000 .reloc 
    2000 .rsrc 
    48000 .text 

我有一個C#/。NET的DLL,它提供的入口點,以控制工業過程,我要檢查它的公開入境點對我們的文件,以確保公開文件的完整性。什麼工具顯示.Net DLL的公共入口點?

我試過Jetbrains DotPeek,它將DLL完整的反編譯成C#源代碼,但這太過於誇張,因爲它顯示了一切,似乎沒有一個彙總模式,它只是報告公共入口點。

+0

所有具有公共方法和屬性的公共類和接口都可以看作.NET程序集的「公共導出」。因此,您可以使用某個反編譯器手動查看它(如您已經這樣做),或嘗試使用Reflection編寫代碼以列出所有這些方法。 –

+0

託管程序集不使用非託管導出。有很多方法可以解決這個問題,理性的是編寫單元測試。 –

+0

不確定單元測試如何解決這個問題。我們的目標是確保當用戶擁有我們的DLL時,通過DLL **公開顯示的所有內容都被記錄下來。顯然,我們可以通過研究源代碼或程序集來推測公開可見的內容,但這只是一個猜測。知道DLL暴露的是經驗性測試,或者至少我們是如何使用較老的Win32 DLL來完成的。程序集和源代碼告訴我們**應該是公開可見的,我希望DLL能夠提供一個雙重檢查,實際上**是公開可見的。 – user316117

回答

4

我認爲通過「切入點」你的意思是「公共類和方法」

如何使用Visual Studio對象瀏覽器?

  1. 創建一個測試項目
  2. 引用添加到您要檢查DLL。
  3. 雙擊參考打開對象瀏覽器
  4. 點擊小「齒輪」圖標並取消選中「顯示私人成員」,「顯示受保護的成員」,「顯示其他成員」,所以你只能看到公共的東西。
  5. 開始瀏覽。
2

正如起點只有,如何列出所有公共類型從目前的組裝,並列出從他們所有的公共方法:

Assembly assembly = Assembly.GetExecutingAssembly(); 
var exports = 
assembly.GetExportedTypes() 
     .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.Public) 
           .Select(member => new 
           { 
            type.FullName, 
            Member = member.ToString() 
           })) 
     .ToList(); 

但是這忽略了嵌套類,屬性,應在將有可能延長,滿足問題需求的方法很少。

+0

由於較舊的Win32 DLL正在查看像dumpbin這樣的工具中的導出,因此提供了一種經驗性的雙重檢查,即檢查在指示的編譯和構建環境中檢查源代碼和其他文件的內容。 – user316117

+0

正如我在評論中所說的,在基於組件的編程的情況下,沒有「雙重檢查」的想法。 –