次のようなバグのあるアプリケーションがあるとします。
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("2 + 1 = {0}", Add(2, 1));
}
static int Add(int x, int y)
{
return x + x; // <-- oops!
}
}
}
アプリケーションはすでにコンパイルされ、実際にデプロイされています。誰かがバグを発見し、修正を要求しています。このアプリケーションを修正して再デプロイすることはできますが、私の制御の及ばない理由で非常に面倒です。代わりに、バグのパッチを書きたいだけです。
具体的には、問題のあるアセンブリ ソース ファイルに独自の MSIL を挿入したいと考えています。私はこれまでにこのようなことをしたことがなく、グーグルで調べても有益な情報は得られませんでした。上記のコードでこれを行う方法のサンプルを見ることができれば、非常に役立ちます:)
コンパイル済みの .NET アセンブリに独自の MSIL をプログラムで挿入するにはどうすればよいですか?
[編集して追加:] 質問者へ: ランタイムのホットスワップは必要ありません。アプリを閉じて、アセンブリを操作してから、プログラムを再起動しても問題ありません。
[もう一度編集:] 一般的なコンセンサスは、「アセンブリを操作することは、プログラムにパッチを適用するための悪い方法である」ということのようです。それが悪い考えなら、私はその道をたどりません。
MSIL インジェクションは他の目的にも役立つ可能性があるため、質問を開いたままにします:)