Domanda

Sto cercando di utilizzare Cecil per ispezionare gli attributi associati con un dato metodo. Sembra di trovarlo, ma non riesco a ottenere il suo nome utilizzando il seguente codice:

AssemblyDefinition assembly = AssemblyFactory.GetAssembly(pathBin);
assembly.MainModule.Types[0].Methods[1].CustomAttributes[0].ToString()

So che questo deve essere l'attributo che ho impostato la mia funzione, perché quando mi tolgo dalla DLL, la seconda riga di codice si rivelerà nulla. Quello che mi piacerebbe fare è essere in grado di ottenere il nome dell'attributo. Attualmente la seconda riga di codice restituirà solo un "Mono.Cecil.CustomAttribute". Direi ci dovrebbe essere un modo di ottenere nome (tipo di classe) il nome di un attributo, giusto?

Grazie!

È stato utile?

Soluzione

Ho avuto problemi con questo quando si scrive MoMA pure. Ecco il codice che utilizza:

AssemblyDefinition assembly = AssemblyFactory.GetAssembly(pathBin);
assembly.MainModule.Types[0].Methods[1].CustomAttributes[0].Constructor.DeclaringType.ToString()

Altri suggerimenti

Una CustomAttribute è un'istanza di un System.Attribute derivato tipo, in modo da ToString() farà tutto ciò l'autore ha deciso.

Se vuoi sapere sui tipi di attributi si dovrebbe chiedere per il loro tipo:

typeInfo.GetCustomAttributes(false)[0].GetType().ToString() ;

Non ho visto questo CustomAttributes proprietà che si sta utilizzando, così ho invece usato il metodo MemberInfo.GetCustomAttributes(bool) che io uso sempre.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top