9

我想在运行时向某个类添加一些行为。我知道如何在运行时使用 Reflection.Emit 进行子类化,但这还不够。根据一些外部配置,我需要在类型 T 的方法中注入操作码,以便从它继承的所有类自动获得此行为。(我不能使用 .NET Profiling API)。

可以用 Mono.Cecil 完成这样的事情吗?

如果无法在加载的程序集上修改代码,那很好,如果我可以在加载程序集之前进行修改,然后将修改后的程序集加载到内存中,但我不知道如何控制程序集加载。

4

2 回答 2

6

不,Cecil 不能修改已加载的程序集。您必须在实际加载程序集之前对其进行检测。

您对如何解决程序集没有太多控制权。如果您将程序集隐藏在您的私有文件夹中,您可以连接到 AppDomain.AssemblyResolve,然后在加载它们之前进行检测。

于 2010-05-02T20:56:36.450 回答
1

正如上面 JB 所说 - 您可以创建一个解决事件处理程序 - 这就像 PSeudoHooking。在加载程序集之前,您进行更改,然后一旦更改完成,解析程序集就会继续加载更改的程序集。

我使用这种方法从内存流中解析嵌入式 Dll。

于 2012-04-18T15:49:22.177 回答