Let's say I have a buggy application like this:
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!
}
}
}
The application is already compiled and deployed into the wild. Someone has found the bug, and now they are requesting a fix for it. While I could re-deploy this application with the fix, its an extreme hassle for reasons outside of my control -- I just want to write a patch for the bug instead.
Specifically, I want to insert my own MSIL into the offending assmembly source file. I've never done anything like this before, and googling hasn't turned up any useful information. If I could just see a sample of how to do this on the code above, it would help me out tremendously :)
How do I programmatically inject my own MSIL into a compiled .NET assembly?
[Edit to add:] To those who asked: I don't need runtime hotswapping. Its perfectly fine for me to have the app closed, manipulate the assembly, then restart the program again.
[Edit one more time:] It looks like the general consensus is "manipulating the assembly is a bad way to patch a program". I won't go down that road if its a bad idea.
I'll leave the question open because MSIL injection might still be useful for other purposes :)