Mono.Cecil - Wie benutzerdefinierte Attribute erhalten
-
11-09-2019 - |
Frage
Ich versuche, Cecil zu verwenden, um die Attribute, die mit einem bestimmten Verfahren zugeordnet ist zu inspizieren. Es scheint, es zu finden, aber ich kann seinen Namen nicht mit dem folgenden Code erhalten:
AssemblyDefinition assembly = AssemblyFactory.GetAssembly(pathBin);
assembly.MainModule.Types[0].Methods[1].CustomAttributes[0].ToString()
Ich weiß, das das Attribut muß ich meine Funktion festgelegt haben, denn wenn ich es aus der DLL entfernen, wird die zweite Zeile Code zu Null ausfallen. Was ich möchte, ist zu tun, der Lage sein, den Namen des Attributs zu erhalten. Derzeit ist die zweite Zeile Code wird wieder nur ein „Mono.Cecil.CustomAttribute“. Ich würde vermuten, es sollte ein Weg sein, ein Name (Klassentyp) Name Attribut des Erhaltens, nicht wahr?
Danke!
Lösung
Ich hatte Probleme mit dieser beim Schreiben MoMA auch. Hier ist der Code verwendet es:
AssemblyDefinition assembly = AssemblyFactory.GetAssembly(pathBin);
assembly.MainModule.Types[0].Methods[1].CustomAttributes[0].Constructor.DeclaringType.ToString()
Andere Tipps
Ein CustomAttribute
ist eine Instanz eines System.Attribute
Typ abgeleitet, so ToString()
wird tun, was der Autor entschieden.
Wenn Sie Attributtypen wissen wollen, sollten Sie sich für ihre Art fragen:
typeInfo.GetCustomAttributes(false)[0].GetType().ToString() ;
Ich habe diese Eigenschaft nicht CustomAttributes
gesehen Sie verwenden, so habe ich eher die Methode MemberInfo.GetCustomAttributes(bool)
, die ich immer verwenden.