使用Reflexil修改類庫

2021-08-31 21:08:05 字數 1094 閱讀 8216

因為公司乙個專案需要修改pps的顏色,於是反編譯了pps的**發現,作者很不厚道的把所有著色都hardcode在**裡

private static voidinsertdefaultseriescolors(analyticcharttemplate template)

在沒有其它辦法下,只好嘗試修改pps的類庫,再加上原有簽名重新部署一次。
這個外掛程式能夠直接在reflctor下修改類庫,並且保留原有簽名, 原本就可以解決我所有問題,但是嘗試過後,發現儲存後的類庫是延遲簽名的, 什麼延遲簽名,可以參考下這鏈結
所以不能直接部署到gac, 頭疼花了接近一天的時間, 去尋找如何部署, 在快要絕望的時候, 意外的發現可以使用ilasm對類庫再簽名, 這就意味著我可以先使用ilasm進行反編譯,再使用原有資源
進行簽名, 為了印證是否正確 ,寫了如下指命

進入vs工具命令列

ildasm c:\microsoft.performancepoint.scorecards.serverrendering.patched.dll /out:c:\microsoft.performancepoint.scorecards.serverrendering.il

進入microsoft.net下framework

ilasm c:\microsoft.performancepoint.scorecards.serverrendering.il /dll
發現能夠註冊到gac, 但是又發現了乙個問題,傳統gac上根本看不到我註冊的dll, 原來又是我粗心了, 使用了.net 4.0的ilasm , 使用到4.0的ilasm重編譯的時候會編譯成4.0的dll, 放的位置跟
2.0的位置是不相同的, 於是使用2.0 ilasm重新試一遍, 大功造成 。
在這做乙個總結, 要修改原有類庫並使用原有簽名的步驟是
1. 使用reflexil進行修改,並儲存為乙個延遲簽名的檔案
2. 使用對應版本的ilasm進行反編譯再重編譯

使用裝飾器修改類定義

修改類定義可以通過單繼承,多繼承 mixin 以及元類等。其實,裝飾器也可以修改類定義,並且和上述提到的方案相比,更簡潔直觀,效能也更強。如下 def log getattribute cls get the original implementation orig getattribute cls...

Boost庫使用 date time類庫

boost庫中使用了timer date time chrono處理時間與日期的問題。在上層開發中,經常碰到不同時間體系的處理,如格里高利歷 utc等,date time解決了大部分蕾絲的問題,是乙個較為全面 靈活的時間和日期類庫,並且可以與c的傳統時間結構tm相互轉換,提供底層支援。date ti...

ASIHttpRequest類庫的使用

asihttprequest有很多功能,所有功能說明都可以在其官方 的相關文件中查到,限於篇幅,本章僅簡單介紹一下如何使用asihttprequest來進行同步http請求和非同步http請求。在後面的章節中,我們還會用到它的一些其他功能。在使用asihttprequest之前,請確認已經正確安裝,...