私はSystem.CodeDom.CodeCompileUnitを使用していくつかの型を動的に構築し、それらをメモリ内のILコードにコンパイルし、そのILコードをメモリにロードされたアセンブリに挿入したいと思います - これをディスクに保存する必要はありません。多分私の述べた計画は間違っています。その目的地にそのCodeCompileUnitインスタンスを取得する方法に関する他の提案があります。コードを発行してロードされたアセンブリに注入するにはどうすればよいですか?
7
A
答えて
7
ICorDebug
インターフェイスを使用して、既存の(すでにロードされている)アセンブリにコードを注入できます。編集して続行します。
デルタバイトを計算し、ICorDebugModule2::ApplyChanges
を呼び出します。詳細はMDbg sample codeを参照してください。
以前は、ICorDebugModule::GetEditAndContinueSnapshot
とkinを使用していましたが、現在は廃止予定です。
更新あなただけの新しいアセンブリを作成するために、Reflection.Emit
を使用すると、より効率的で、非常に簡単に、既に読み込まれたアセンブリにコードを注入することを気にしない場合。
+0
この解決策は質問に直接答えます。ありがとう。 –
1
System.Reflection.Emit名前空間を使用して、動的なメモリ内アセンブリを作成することもできます。
代わりに、&をコンパイルコードを生成するためにCodeDomを使用して呼び出してください。
XMLSerialization()が後者を行います。
1
Mono.Cecilを使用してILを操作できます。これは強力なツールですが、何らかの理由でドキュメントが欠けています。
関連する問題
- 1. Assembly.Load(byte [])を通じてロードされたアセンブリをデバッグするにはどうすればよいですか?
- 2. 注入されたJavaScriptファイルの参照コードがWebページで実行されないようにするにはどうすればよいですか?
- 3. アセンブリでCアプリケーションをロードするにはどうすればよいですか?
- 4. ロードされたアセンブリをクリアして、プラグインをリロードしたときに重複しないようにするにはどうすればいいですか?
- 5. 注入されたロガーをgrailsで動作させるにはどうすればよいですか?
- 6. 動的にロードされるアセンブリからネストされた型を含むジェネリック型をロードするにはどうすればよいですか?
- 7. 既にロードされているアセンブリにどのように反映するか?
- 8. 複数行のコードに複数行のコードを挿入するにはどうすればよいですか?
- 9. ホームページにJavaScriptコードがロードされていると思って、ウェブサイトにJavaScriptコードをロードするにはどうすればよいですか?
- 10. バインドされたHTMLをPolymer 2に注入するにはどうすればいいですか
- 11. 注文されたテストのみを実行するにはどうすればよいですか?
- 12. クロムエクステンションにロードされたiframeにCSSとJavascriptを挿入するにはどうすればいいですか?
- 13. アプリケーションが正しいアセンブリをロードすることを知るにはどうすればよいですか?
- 14. コンポーネントにajaxによってロードされた値を渡すにはどうすればよいですか?
- 15. このコードに依存性注入を適用するにはどうすればよいですか?
- 16. Dev-C++にCコードからintelアセンブリを生成させるにはどうすればよいですか?
- 17. すでにインスタンスがロードされている場合、ペン先がロードされないようにするにはどうすればよいですか?
- 18. Android - プロセスをロードした後*コードを実行するにはどうすればいいですか?
- 19. ロード中の.NETアセンブリに安全でないコードが含まれていることを検出するにはどうすればよいですか?
- 20. アセンブリ言語のコードをCコードに変換するにはどうすればよいですか?
- 21. PowerMockRunnerで実行されるアンドロイドユニットテストからjsonファイルをロードするにはどうすればよいですか?
- 22. ネストされた行を入れ子レベルで並べ替えるにはどうすればよいですか?
- 23. 配列にコードを挿入しないようにするにはどうすればよいですか?
- 24. パンダテーブルに挿入された行名を削除するにはどうすればよいですか?
- 25. 制限された関数アクセスでjavascriptコードを実行するにはどうすればよいですか?
- 26. このPHPコードで変数を使用して注文するにはどうすればよいですか?
- 27. SQLiteで複数の行に挿入されたIDを返すにはどうすればよいですか?
- 28. NTSTATUSから返された正しいコードに変換するにはどうすればよいですか?
- 29. AJAX経由でロードされたDOMに動的に注入されたjavascriptを実行します(history.jsでウェブサイトをajaxifyしようとしています)
- 30. stdinで導入された行の数を表示するにはどうすればよいですか?
なぜ、すでに読み込まれているアセンブリに型を挿入する必要がありますか?なぜあなたは現在それらをビルドしているアセンブリに注入できないのですか? – yfeldblum
@ Justice:それは良い点です。何よりも好奇心です。シナリオを工夫しなければならないとすれば、メモリで作業するだけでアセンブリを構築するというファイルシステムのアクセス許可を回避することができます。あるいはアセンブリにコードを注入し、アプリケーションを再コンパイルせずに物を検査するために動的に呼び出すことができます。 –
私はこれを行う方法があるかどうかはわかりません。もしあれば、私も知りたいのですが。 –