C# Mono.Cecil能否修改AppDomain中已加载的代码?

C# Mono.Cecil能否修改AppDomain中已加载的代码?,c#,.net,profiling,intermediate-language,mono.cecil,C#,.net,Profiling,Intermediate Language,Mono.cecil,我想在运行时向某个类添加一些行为。我知道如何在运行时使用Reflection.Emit生成子类,但这还不够。根据某些外部配置,我需要在类型T的方法中注入操作码,以便从它继承的所有类自动获得此行为。(我不能使用.NET评测API) 这样的事情可以用Mono.Cecil来做吗 如果无法在加载的程序集上修改代码,则可以在加载程序集之前进行修改,然后将修改后的程序集加载到内存中,但我不知道如何控制程序集加载 不,Cecil无法修改加载的程序集。您必须在实际加载程序集之前对其进行检测 您无法控制如何解析程

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

这样的事情可以用Mono.Cecil来做吗


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

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

您无法控制如何解析程序集。如果将程序集隐藏在自己的私人文件夹中,则可以挂接到AppDomain.AssemblyResolve,然后在加载它们之前插入指令。

如JB所述- 您可以创建一个解析事件处理程序,这类似于伪挂钩。 在加载程序集之前,您需要进行更改,更改完成后,解析程序集将继续加载更改后的程序集


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

您这样问是因为要优化代码吗?您是否愿意将采样作为仪器的替代方案?许多人相信仪器,因为它是“精确的”,这不是优化所需要的。如果您想优化,请考虑此方法:它不是我正在寻找的优化,我想要的是将一些行为添加到基于配置的框架中。例如,以TypeDescriptor检查机制为例,如果我读取一些配置并向基类T添加一些公共属性,那么使用TypeDescriptor机制检查T或其任何子类的人都将看到该属性,但是如果使用反射进行相同的检查,则该属性将丢失。这是因为类型实际上没有被修改,属性只是添加到TypeDescriptor检查的上下文中。