我甚至不確定這是否可能,所以如果不是這樣的話可能會道歉。我搜索了相當廣泛,沒有找到我在找什麼。在使用反射的DLL中覆蓋方法
基本上我們有一個由第三方生產的應用程序,完全鈍的是垃圾。我們有一個特殊的問題,並設法使用ILSpy跟蹤DLL中的方法。顯然,我們沒有(也無法獲得)源代碼,所涉及的公司不願意在任何合理的時間尺度上解決問題。
因此,我們調查了各種調查渠道,並沒有提出任何建議。我一直在研究是否可以使用反射來完成,這幾乎是我們得到這個工作的最後希望。概括地說,就是我想要做的是:
- 因爲現有的DLL具有相同名稱創建一個簡單的類庫
- 使用反射來從現有的DLL
- 不知何故導入方法重寫正確的代碼
- 重建代碼,所以我有一個新的DLL,包含99%的現有DLL的功能,但是使用我的覆蓋代碼提供了正確的功能。
我發現,我的調查TypeBuilder.DefineMethodOverride期間,也從一個StackOverflow的頁面,這似乎相似,但並不完全是我所期待的。
http://msdn.microsoft.com/en-us/library/system.reflection.emit.typebuilder.definemethodoverride.aspx
Is there a way to "override" a method with reflection?
任何意見讚賞!
安德魯
編輯
其他可能的想法,我有是生產含有超控功能的部分類,但似乎沒有可行的兩種。
想知道如果一個基於攔截器的方法可以在這裏工作 - 像Castle DynamicProxy:http://www.castleproject.org/projects/dynamicproxy/ - 顯然你不會完全取代方法調用,但你當然可以攔截/錯誤句柄和調整(哦是的,這取決於如果類有虛擬方法) – Charleh
爲什麼不只是一個類,如你所說,調用第三方類的大多數除了你想重寫的方法之外的東西?或者從該類派生併爲該方法使用另一個名稱?你是否真的需要在1個獨特的DLL裏面?爲什麼不把它分成2個? – ppetrov