2017-07-25 111 views
0

Grreting傢伙,反彙編參考內部類第三方DLL

一個問題困擾了我好幾天,我想可能是它的時候,我與社區共享。

我需要對公司的舊項目進行更改。此Dll引用第三方DLL並在該DLL中使用內部類。引用的Dll將此文件聲明爲朋友,或將InternalVisibleTo設置爲此文件名和publicToken。

現在,我希望引用的dll允許我訪問它的內部內容,但在我的項目中,我得到錯誤「'BlaBla'由於其保護級別而無法訪問」,它明確指出它不會允許我訪問來自新的Dll的內部類。

解決方案到目前爲止,我曾嘗試:

  1. 對所引用的DLL,並在我的文件InternalVisibleTo部分的IL文件使用ILDASM,我取出全部PublicTokenKey。 Ilasm再次,但沒有成功。

  2. 爲我的dll創建了一個新的強類型名稱,與之前的名稱相同,但它不起作用。

    ILASM foo.dll/DLL

所以,現在我在這裏留下無法再往前走。我非常感謝與此事有關的任何幫助或討論。

PS:我想分享非常類似的一個問題,我跟着一行一行地沒有工作 https://stackoverflow.com/a/12202623/861489

回答

0

OK,看來我終於設法打破魔咒! 我與大家分享,以便將來有人來到這裏。

該過程是正確的,唯一的問題是引用的Dll Manifest中的友誼聲明。我使用Rad工具的「JustDecompile」工具,看到問題 JustDebug Screen

你看到我聲明爲朋友的Dll被明確定義了!我發現在IL文件編輯器中沒有任何方法可以做到這一點,而不會出錯。所以我使用「JustDecompile」爲我編譯代碼並製作項目。它有這麼多的錯誤,並沒有編譯。但我不在乎。我刪除了所有的代碼文件並添加了一個空的代碼文件。然後在AssemblyInfo.cs文件中,我找到了我正在尋找的InternalVisibleTo標籤的聲明。我改變了我的預期文件並從中刪除了PublicTokenKey,並用1個cs文件編譯了這個項目。我只是想它,並在清單文件中獲得了新的記錄!我在舊文件清單中使用了這個新記錄,並使用了它。 把它放在我的項目和揮發!有用! 上帝很有趣!