2011-02-04 12 views
3

名前で基本クラスのメソッドにMethodReferenceを取得するにはどうすればよいですか?Mono.Cecil:他のアセンブリから基本クラスのメソッドを呼び出す

私は

type.BaseType.Resolve().Methods; 

を試みたと私はassemblyresolverに基本クラスを含むDLLを追加する場合には、メソッドを返します。 しかし、私は(baseMethodが解決TypeDefinitionからメソッドをforeachingによって発見されました)

MSILWorker.Create(OpCodes.Call, baseMethod); 

を使用して通話 たILもリフレクターがフリーズして終了し、読めないを追加した場合。

現在、いくつかのIL:
タイプのプライベートメソッドを呼び出す場合:基本型で保護されたメソッドを呼び出す場合

call instance void SomeNamespace.MyClass::RaisePropertyChanged(string) 

を:だから

call instance void [OtherAssembly]BaseNamespace.BaseClass::RaisePropertyChanged(string) 

を、どのように私はモノを使用して、後者を生成することができます。セシル?

答えて

5

あなたが推測したように、適切なMethodReferenceをモジュールのスコープに設定する必要があります。あなたが持っているならば:

次に、baseTypeとbaseMethodは別のモジュールの定義です。

MethodReference baseMethodReference = type.Module.Import (baseMethod); 
il.Emit (OpCodes.Call, baseMethodReference); 
+0

私の同様の問題についても教えてもらえますか? http://stackoverflow.com/questions/4968755/mono-cecil-call-generic-base-class-method-from-other-assemblyありがとうございました。 – TDaver

+0

@TDaver:SOの代わりにモノセシルのGoogleグループを使用すると、すぐに回答を受け取る機会が増えます。 –

関連する問題