2011-12-08 109 views
2

可能重複:
Is there an API for verifying the MSIL of a dynamic assembly at runtime?PE驗證碼?

我動態地生成使用Reflection.Emit等的組件。

對於單元測試,我想驗證我的IL。

我可以從命令行執行它,但我寧願在代碼中執行此操作。

有沒有辦法做到這一點比調用PEVerify.exe更方便?理想情況下,我希望直接將它交給動態程序集,而不必先將程序集保存到磁盤。

理想我正在尋找沿(僞碼線的東西:

Assert.IsFalse(new PEVerifier(myAssembly).Verify().Errors.Any()); 
+1

嗯,做一些挖掘。看起來真正的工作是通過框架目錄中peverify.dll中的'VerifyMethod'導出完成的。我的一般感覺是,你將不得不在另一個AppDomain中這樣做。 PE驗證會加載程序集及其所有依賴項。命令行可能只是一個更好的選擇。 – vcsjones

+0

@MauricioScheffer同意它可能是重複的。我搜索了標有'[peverify]'的問題,並且因爲沒有標記而錯過了它。 –

回答

1

你可以,因爲「重複」的問題的回答表明,弄清楚如何掛鉤到由PEVerify使用的本機DLL。 exe文件(我猜這會導致問題,因爲它沒有記錄,可能會有變化)

另一種選擇是使用AssemblyBuilder類來將您正在創建的動態程序集寫入磁盤在臨時位置,然後通過System.Diagnostics.Process類調​​用PEVerify.exe(非常類似於此PEVerifier類示例)。

+0

這個類是有幫助的,因爲這正是我要寫的(當然,我打算使用F#,但是......)如果我必須在磁盤上使用程序集,那麼非常感謝! –