9

実行時に特定のクラスに動作を追加したいと思います。Reflection.Emitを使用して実行時にサブクラス化する方法を知っていますが、それだけでは不十分です。一部の外部構成によっては、タイプTのメソッドにオペコードを挿入して、それを継承するすべてのクラスが自動的にこの動作を取得するようにする必要があります。(.NETプロファイリングAPIを使用できません)。

このようなことはMono.Cecilで行うことができますか?

ロードされたアセンブリのコードを変更できない場合は、アセンブリをロードする前に変更を加えてから、変更したアセンブリをメモリにロードできれば問題ありませんが、アセンブリのロードを制御する方法がわかりません。

4

2 に答える 2

6

いいえ、Cecilはロードされたアセンブリを変更できません。実際にロードする前に、アセンブリをインストルメント化する必要があります。

アセンブリの解決方法をあまり制御することはできません。自分のプライベートフォルダにあるアセンブリを非表示にした場合は、AppDomain.AssemblyResolveにフックして、ロードする前にインストルメントすることができます。

于 2010-05-02T20:56:36.450 に答える
1

JBが上で述べたように、Resolveイベントハンドラーを作成できます。これはPSeudoHookingのようになります。そして、アセンブリがロードされる前に変更を加え、変更が完了すると、ResolveAssemblyは変更されたアセンブリのロードを続行します。

この方法を使用して、メモリストリームからEmbeddedDLLを解決します。

于 2012-04-18T15:49:22.177 に答える