2012-10-13 29 views
2

評論我有一個C#代碼,我想CIL(* .il內)包含我的自定義的意見時,我做了源C#EXE組裝拆卸。寫入CIL

如何實現的呢?

+1

只是出於興趣,你爲什麼要這麼做? – Adam

+0

這是不可能的。最實用的方法是簡單地要求C#程序的所有者與您分享代碼。你有沒有,也許你會得到一個是的。找出答案的唯一方法就是問。鑑於將一個exe反編譯回C#代碼是多麼容易,你會比你想象的更頻繁地得到一個yes。微軟公佈.NET框架的源代碼的原因。 –

回答

4

組裝IL操作碼不包含註釋,所以你不能拆卸,並得到了評論。基本上,你不能這樣做。要麼共享IL源,要麼調查一個pdb是否可能用於原始IL源。

沒有「意見」的操作碼。

+0

* .il確實包含它們(// MyClass的結尾)。 –

+2

@Alan是的,但il文件不是組裝的操作碼。註釋在組裝到操作碼時被丟棄**,並且不存在於組件中。因此,他們不能通過評論拆分回.il。作爲另一個例子,一個.il文件可能包含空白 - 也不會保留 –

1

您可以編寫出使用ILGenerator.Emit任意IL操作碼,但我不認爲有注射評論任何支持那裏。

如果你只是想爲調試目的(例如使搜索更容易),你總是可以用描述性的名稱添加一個未使用的變量做到這一點。例如:

void Main() 
{ 
    var a = new A();  
} 

class A 
{ 
    bool this_is_a_comment = false; 
} 

產生

IL_0001: newobj  UserQuery+A..ctor 
IL_0006: stloc.0  

A..ctor: 
IL_0000: ldarg.0  
IL_0001: ldc.i4.0  
IL_0002: stfld  UserQuery+A.this_is_a_comment 
IL_0007: ldarg.0  
IL_0008: call  System.Object..ctor 
IL_000D: nop   
IL_000E: ret  
+0

但這不是一個評論。 –