2015-05-07 27 views
2

我的代碼正在接收通過WCF服務構建程序集的字節數組。如何查看程序集的動態加載代碼?

最後我創造我與裝配對象:

Byte[] bytesFromWCF = ... // here I receive the bytes via WCF. 
Assembly myAsm = Assembly.Load(bytesFromWCF); 

字節這個數組來源於其在web服務器託管的MSIL文件。我沒有直接訪問該文件。 這個MSIL文件的方法用屬性DebuggerHidden()裝飾。

我的問題是如果有一種方法可以在運行時查看myAsm中動態加載的代碼嗎?

我的意思是方法的代碼。通過反射我可以訪問類型,創建實例,調用方法等,但我有興趣分析源代碼。

+1

你爲什麼不下載該文件,並在.NET反編譯器打開它?例如dotPeek。在那裏你可以分析程序集的源代碼。 – cansik

+0

我無法直接訪問該文件。在批准授權過程之後接收字節數組,爲了清楚起見,我在代碼中省略了這些授權過程。 – cls71

+1

@ cls71:您可以使用curl,wget,...簡單地模擬身份驗證過程,或者只是將字節數組存儲在文件中... –

回答

2

分析程序集源代碼的簡單方法是將字節數組保存到文件中,並將下載的文件加載到.NET反編譯器(dotPeek,.NET Reflector等)中。

保存字節數組到一個文件可以通過IO命名空間來實現:

byte[] bytesFromWCF = ... // here I receive the bytes via WCF. 
System.IO.File.WriteAllBytes("mylib.dll", bytesFromWCF); 
var myAsm = Assembly.Load(bytesFromWCF); 
...