假设我有一个这样的错误应用程序:
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 插入到有问题的汇编源文件中。我以前从来没有做过这样的事情,谷歌搜索也没有找到任何有用的信息。如果我可以在上面的代码中看到如何执行此操作的示例,它将极大地帮助我:)
如何以编程方式将自己的 MSIL 注入已编译的 .NET 程序集?
[编辑添加:] 对于那些问的人:我不需要运行时热交换。关闭应用程序,操作程序集,然后再次重新启动程序对我来说非常好。
[再编辑一次:] 看起来普遍的共识是“操纵程序集是修补程序的坏方法”。如果这是一个坏主意,我不会走那条路。
我会留下这个问题,因为 MSIL 注入可能仍然对其他目的有用:)