2016-06-12 22 views
0

Ist es möglich mit Mono Cecil IL Kommentare zu erhalten und zu setzen? Ich versuche, einer Assembly mithilfe eines Patchers einen Kommentar hinzuzufügen. Wenn der Patcher zweimal auf der Datei ausgeführt wird, kann er auf den Kommentar zugreifen und zwei Änderungen vermeiden.IL Kommentare mit cecil

Antwort

1

Nein, Sie können dem Methodbody keine Kommentare hinzufügen.

Sie können Ihre Informationen jedoch in den Metadaten beibehalten, indem Sie sie beim ersten Ausführen als benutzerdefinierte Attribute hinzufügen. Wenn Sie komplexe Daten benötigen könnte es ein bisschen schwierig, da types in custom attributes are limited to sein:

  • Einer der folgenden Typen: Bool, Byte, char, double, float, int, lang, kurz, string.
  • Der Typ Objekt.
  • Der Typ System.Type.
  • Ein Enum-Typ, sofern er öffentlich zugänglich ist und die Typen, in denen er verschachtelt ist (falls vorhanden), auch öffentliche Zugänglichkeit haben (Abschnitt 17.2).
  • Eindimensionale Arrays der oben genannten Typen.

Aber wenn man ein bisschen kreativ sind, sollte es machbar sein, zum Beispiel, wenn seine genug Offsets in der Method nach einer Änderung markieren Sie Metadaten wie diese könnte hinzufügen:

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) { } 
}