2009-08-07 14 views
1

I Cecil bin mit versuchen, meine Attribute Eigenschaften zu lesen:Cecil - Erste die definierte Attribute Eigenschaften

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] 
public sealed class TraceMethodAttribute : Attribute { 
    public TraceMethodAttribute() { 
     MethodStart = true; 
     MethodReturn = true; 
     MethodMessages = true; 
    } 

    public bool MethodStart { get; set; } 
    public bool MethodReturn { get; set; } 
    public bool MethodMessages { get; set; } 
} 

[TraceMethod(MethodMessages = false)] 
static void Main(string[] args) { 
} 

...

if (attribute.Constructor.DeclaringType.FullName == typeof(TraceMethodAttribute).FullName) {   
    if ((bool)attribute.Fields["MethodMessages"] == true) { 
     EditMethodStart(assembly, method); 
    } 

Dies ist, würde ich dieses letzte Block mag von Code, der überprüft wird, wenn für das Attribut, das auf Main angewendet wurde, beispielsweise MethodMessages auf true oder false festgelegt ist. Von dem, was ich gesehen habe, scheint es wie beide Attribute.Fields.Count und attributes.Properties.Count ist auf 0 gesetzt. Warum ist es?

Danke

Antwort

2

Sollte gut durch den Zugriff auf Eigenschaften Sammlung von Indexer funktionieren.

if (attribute.Constructor.DeclaringType.FullName == typeof(TraceMethodAttribute).FullName) {   
    if ((bool)attribute.Properties["MethodMessages"] == true) { 
     EditMethodStart(assembly, method); 
    } 

Nur kompiliert und überprüft es.

Verwandte Themen