2009-08-07 6 views
1

J'utilise Cecil pour essayer de lire mes propriétés attributs:Cecil - Mise en les propriétés des attributs définis

[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); 
    } 

Ceci est, je voudrais ce dernier bloc de code à vérifier chaque fois que l'attribut appliqué à Main, par exemple, a MethodMessages défini sur true ou false. De ce que j'ai vu, il semble que les deux attributs.Fields.Count et attributes.Properties.Count est mis à 0. Pourquoi est-ce?

Merci

Répondre

2

Doit fonctionner correctement en accédant à la collection de propriétés par indexeur.

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

Juste compilé et vérifié.

Questions connexes