IL对塞西尔发表评论

时间:2016-06-12 23:23:18

标签: cil mono.cecil

是否可以使用单声道Cecil来获取和设置IL注释?我正在尝试使用修补程序向程序集添加注释,这样如果修补程序在文件上运行两次,它就可以访问注释并避免进行两次更改。

1 个答案:

答案 0 :(得分:1)

不,你不能在方法体上添加评论。

但是,您可以通过在首次运行时将其添加为自定义属性来将信息保留在元数据中。当您需要复杂的数据时,types in custom attributes are limited to

可能会有点棘手
  
      
  • 以下类型之一:bool,byte,char,double,float,int,long,short,string。
  •   
  • 类型对象。
  •   
  • 类型System.Type。
  •   
  • 枚举类型,前提是它具有公共可访问性,并且嵌套类型(如果有)也具有公共可访问性(Section   17.2)。
  •   
  • 上述类型的一维数组。
  •   

但是当你有点创意时,它应该是可行的,例如当它足以在更改后标记方法体中的偏移时,你可以添加这样的元数据:

public class C
{
    [TypeOneChanges(new uint[] { 0, 16, 124 })]
    [TypeTwoChanges(new uint[] { 5, 10 })]
    public void M() { }
}

[AttributeUsage(System.AttributeTargets.Method)]
class RemarkableOffsetAttribute : Attribute
{
    public uint[] Offsets { get; }

    public RemarkableOffsetAttribute(uint[] offsets)
    {
        Offsets = offsets;
    }
}

class TypeOneChangesAttribute : RemarkableOffsetAttribute
{
    public TypeOneChangesAttribute(uint[] offsets) : base(offsets) { }
}

class TypeTwoChangesAttribute : RemarkableOffsetAttribute
{
    public TypeTwoChangesAttribute(uint[] offsets) : base(offsets) { }
}