2009-09-29 70 views
12

當使用DynamicMethod的它可以調用方法和訪問字段如果您在DynamicMethod constructor使用MethodBuilder生成動態IL時,是否可以跳過可見性檢查?

的restrictedSkipVisibility參數提供「真」,這將是其他方式不可訪問產生IL我寧願發出的動態IL成動態組裝相反,我可以在生成時將生成的IL保存到程序集中。如果我使用這種方法,我必須使用MethodBuilder而不是DynamicMethod。不過,我需要能夠跳過可見性檢查,以便在運行動態代碼時不會出現MethodAccessException。有沒有辦法做到這一點,如果是的話如何?

+0

問題解決了嗎?你能簡單描述一下你是如何解決它的? – kizzx2 2011-05-04 09:49:42

+0

不可以。據我所知,它是不可解的。通過使用Mono.Cecil庫重新編寫程序集,我最終採用了另一種解決方案。這樣我就可以訪問私人或內部成員而不違反類型安全規則。但是,用這種方法,我無法使符號與源文件正確匹配,導致其他煩惱。 – 2011-05-10 20:27:20

回答

2

將MethodBuilder應用到動態程序集中時,您將被綁定到與編譯器生成的程序集相同的規則。因此,組件間可見性受以下因素支配:

請閱讀文檔和示例,瞭解它是否可以滿足您的需求。

0

如果您需要通過接口而不是委託來實現您生成的代碼,那麼il將用於跳過MethodBuilder的VisibilityCheck。我沒有找到直接執行的方法,但可以使用EmitCalli(OpCodes.Calli ...)在MethodBuilder中簡單調用DynamicMethod。

相關問題