質問

のは、私はこのようなバグのあるアプリケーションがあるとしましょう。

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!
        }
    }
}

アプリケーションがすでにコンパイルされ、野生に展開されます。誰かがバグを発見した、と今、彼らはそれのための修正を要求しています。私は可能性がありますが修正、外部の私のコントロールの理由のためにその極端な手間でこのアプリケーションを再配備する - 。私はだけではなく、バグのパッチを書きたい。

具体的には、私は、問題のあるassmemblyソースファイルに自分のMSILを挿入したいです。私は前に、このような何かをやったことがない、とグーグルでは、任意の有用な情報が提供されていません。私は上記のコードでこれを行う方法のサンプルを見ることができれば、それは途方もなく私を助けになります。)

私はプログラム的にコンパイルされた.NETアセンブリに自分のMSILを注入はどうすればよいですか?

[編集追加する:]尋ねた人に:私は、実行時のホットスワップを必要としません。その私は、アプリを閉じていアセンブリを操作するために完璧に罰金、再度プログラムを再起動します。

[1つのより多くの時間を編集します]一般的なコンセンサスは、「アセンブリは、プログラムにパッチを適用するの悪いの方法で操作する」されるように見えます。私はその道を行くことはありません場合はそのA 悪いアイデア。

MSIL注入は、まだ他の目的のために有用であるかもしれないので、私は未解決の問題を残しておきます。)

役に立ちましたか?

解決

私が尋ねる質問は、「どのようにパッチを配備するだろう」であると思いますか?どこか、あなたは野生で出すでにあるバグを修正するために何かを配備する必要があります。なぜDLLを再コンパイルし、修正版をリリースは本当に問題になるのでしょうか?私の推測では、プログラムでMSILを注入する方法を考え出すことは、単に固定アセンブリを再デプロイよりもトラブルになるだろうということです。

他のヒント

むしろ、実行時にMSILを注入するよりも、あなたがアセンブリに直接ソースを挿入すると考えがありますか?

あなたは、そのの製品を展開し、ILDASMを分解し、あなたのMSILを挿入し、ILASMで組み立て直すことができます。

あなたのexeファイルは、その後、署名されている場合は、

それは不可能であろう。なぜあなたはちょうどその単一のアセンブリを解放することはできません、代わりに再びアプリケーション全体を出荷しますか?あなたは、単純な問題のために複雑な解決を目指しているように思えます。

あなたは、静的MSILインジェクションを使用することができます。モノセシルまたはPostSharp多分役立ちます。

情報の良いソース...

ILプログラミングのebook

他には、ILプログラミング上のMS Pressの書籍です。

ILにコンパイルおよび再コンパイルする手順

1。 ILDASM /output=ConsoleApplication1.il ConsoleApplication1.exe

2。 // ConsoleApplication1.ilコードを変更

3。 ILASM ConsoleApplication1.il

あなたはこれを正常に実行するために、アンマネージコードが必要になりますが、それは行うことができます...

を参照してください。のhttp:/ /www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-timeする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top