2011-07-05 40 views
8

鑑於PEVerify錯誤和警告輸出如下所示,如何追溯到有問題的類和接口名稱?假設我不是編譯器作者或IL魔術師。有解碼PEVerify錯誤和警告的簡單方法嗎?

[MD]: Error: Class implements interface but not method (class:0x02000091; interface:0x06000169;method:0x00000000). [token:0x09000043] 
[MD]: Warning: MemberRef has a duplicate, token=0x0a0001ff. [token:0x0A000060] 
+0

如果您不是編譯器作者或IL黑客,那麼您是如何製作出具有這些問題的程序集的? .NET編譯器在所有情況下生成有效的程序集(缺少c的編譯器錯誤) – thecoop

+0

@thecoop自從最初發布該問題後,我確定這些錯誤在第三方程序集中。該程序集是OSS項目的構建版本,因此仍然希望對其進行跟蹤。 – bentayloruk

+1

@thecoop當你實現[IHideObjectMember intellisense trick]時,會出現這些錯誤(http://blogs.clariusconsulting.net/kzu/how-to-hide-system-object-members-from-your-interfaces/ )。這是我們的原因,我們已經在使用這個技巧的第二個程序集(Autofac和Moq)上對它進行了驗證。 – bentayloruk

回答

11

使用ILDASM並加載有問題的程序集。轉到查看 - > MetaInfo->顯示!這將打開一個文本查看器,顯示裝配元數據的可讀版本。搜索十六進制標識符(但跳過「0x」部分)以查找相關的類,接口和方法。

+0

有沒有什麼辦法以編程方式做到這一點? – BatteryBackupUnit

+1

PE文件格式(包含此信息的標頭)已有詳細記錄,並在Windows SDK的Windows頭文件中定義了結構,其中大部分可用作PInvoke映射的C#結構。這裏有人的代碼用於閱讀該標題的不同部分:http://code.cheesydesign.com/?p=572 –