J'ai une liste d'environ 25 types trouvés dans l'assembly mscorlib.dll Microsoft .NET où j'ai besoin d'extraire les signatures IL de la classe et de ses membres . Je veux un fichier par type, avec chaque signature sur une ligne. Ainsi, par exemple, prendre le typeMécanisme pour extraire des signatures spécifiques IL (langage intermédiaire .NET) d'un assembly
System.Collections.Generic.Comparer<T>
Je veux extraire les éléments suivants de l'ensemble de ce type (il y a des députés que je ne vais pas avoir besoin, mais je peux gérer cela manuellement si nécessaire).
.class public abstract auto ansi serializable beforefieldinit System.Collections.Generic.Comparer`1<T> extends System.Object implements System.Collections.IComparer, class System.Collections.Generic.IComparer`1<!T>
.method family hidebysig specialname rtspecialname instance void .ctor() cil managed
.method public hidebysig newslot abstract virtual instance int32 Compare(!T x, !T y) cil managed
.method private hidebysig newslot virtual final instance int32 System.Collections.IComparer.Compare(object x, object y) cil managed
.property class System.Collections.Generic.Comparer`1<!T> Default() { .get class System.Collections.Generic.Comparer`1<!T> System.Collections.Generic.Comparer`1::get_Default() }
Alors, je l'ai pensé à quatre façons d'y parvenir:
couper et coller manuellement chaque signature de chaque type à la main dans les fichiers texte à partir ildasm (soit directement, soit par l'intermédiaire d'une décharge de mscorlib.dll). Certains types sont assez longs, donc cela pourrait devenir fastidieux. Et ce n'est certainement pas une bonne solution à long terme si je dois en faire plus.
Écrivez un outil qui utilise Reflection pour essayer d'obtenir toutes les signatures. J'ai, à un niveau élevé, pensé à utiliser quelque chose comme le code-code [1] ci-dessous.
Ecrire un outil qui utilise l'analyse syntaxique chaîne sur la décharge de l'IL de ildasm pour trouver les types et obtenir les signatures
Utilisez un outil déjà existant pour accomplir la tâche.
Est-ce que quelqu'un connaît un outil ou un mécanisme existant qui pourrait m'aider à accomplir ma tâche? Si non, des suggestions sur la direction à prendre pour obtenir un tel outil? Et si vous avez des idées de code sur la façon de le faire, j'aimerais les entendre.
[1]
System.Reflection.GetType(string)
Type.GetMethods() For each item in
MethodInfo, GetMethodBody()
GetILAsByteArray().ToString()
Determine a way to get just the signature from the IL
Merci Ben. Red Gate Reflector a réduit mon temps de 60-70% Je parie. C'est une excellente solution à court terme. –