C# 是否可以编辑已经存在的属性集函数调用的CIL(MSIL)指令?

C# 是否可以编辑已经存在的属性集函数调用的CIL(MSIL)指令?,c#,cil,C#,Cil,我知道我们可以使用TypeBuilder类在运行时定义类型、方法、属性和构造函数 现在我想知道是否可以在运行时编辑函数CIL(MSIL)代码流。(或至少将另一个函数设置为集合访问器) 为了进行测试,我创建了一个虚拟类,如下所示: 公共类DummyClass { 公共长prop1{get;set;} 公共样本类() { } } 我想编辑它的set函数,以始终设置值-1。 我获得的最好结果是访问setter CIL(MSIL)指令,如下所示: var-ILInstructionAsByteArra

我知道我们可以使用TypeBuilder类在运行时定义类型、方法、属性和构造函数

现在我想知道是否可以在运行时编辑函数CIL(MSIL)代码流。(或至少将另一个函数设置为集合访问器)

为了进行测试,我创建了一个虚拟类,如下所示:

公共类DummyClass
{
公共长prop1{get;set;}
公共样本类()
{
}
}
我想编辑它的set函数,以始终设置值
-1
。 我获得的最好结果是访问setter CIL(MSIL)指令,如下所示:

var-ILInstructionAsByteArray=typeof(DummyClass).GetProperties()[0].GetSetMethod().GetMethodBody().GetILAsByteArray()
甚至可能吗?

是的


使用本文,我能够在运行时编辑MSIL。我不会向任何有其他解决方案的人推荐它。

如果包含此类的程序集已经加载,那么您就不能再修改它了。所有修改都必须在加载之前进行。根据您的需求,您可以尝试使用Harmony(参见此处的示例:),这正是我需要的。我不知道它是否能直接回答这个问题,但如果你想补充一个答案,我会接受。