Mecanismo de extracto específico IL (Intermediate Language .NET) firmas partir de un ensamblaje

StackOverflow https://stackoverflow.com/questions/3622760

Pregunta

Tengo una lista de alrededor de 25 tipos que se encuentran en el Microsoft .NET ensamblado mscorlib.dll donde necesito para extraer las firmas IL de la clase y sus miembros. Quiero un archivo por cada tipo, con cada firma en una línea. Así, por ejemplo, tomar el tipo

System.Collections.Generic.Comparer<T>

Quiero extraer lo siguiente de la asamblea para ese tipo (hay algunos miembros privados no voy a necesitar, pero que pueden manejar manualmente si es necesario).

.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() }

Por lo tanto, he pensado en cuatro maneras de lograr esto:

  • manual de cortar y pegar cada firma de cada tipo a mano en los archivos de texto desde ildasm (ya sea directamente o por medio de un vertedero de mscorlib.dll). Algunos de los tipos son bastante largo, así que esto podría resultar tedioso. Y esto definitivamente no es una buena solución a largo plazo si tengo que hacer algo más.

  • Escribir una herramienta que utiliza la reflexión para tratar de conseguir todas las firmas. He, a un alto nivel, pensado en utilizar algo así como el pseudo-código de [1] a continuación.

  • Escribir una herramienta que el análisis usos cadena en el vertedero de IL ildasm para encontrar los tipos y obtener las firmas

  • El uso de una herramienta ya existente para realizar la tarea.

¿Alguien sabe de una herramienta o mecanismo existente que podría ayudarme a cumplir mi tarea? Si no, alguna sugerencia sobre qué dirección tomar para obtener una herramienta de este tipo hizo? Y si usted tiene alguna idea de código acerca de cómo lograr que se haga, le agradecería escucharlas.

[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
¿Fue útil?

Solución

reflector de puerta roja podría hacer cortar y pegar ir mucho más rápido.

Otros consejos

Se puede reconstruir la firma del método de la información encontrada en MethodInfo. No es necesario GetMethodBody - no hay información de firma en ese país. MemberInfo.Name, MemberInfo.ReturnType, MemberInfo.GetParameters (), etc. Es todo lo que hay.

Si usted decide obtener la firma de la IL, tendrá que escribir una especie de firma analizador. David Broman ha publicado una muestra de arriba en la galería de MSDN código aquí . No es completamente funcional (en concreto, se le tiene que añadir soporte para los genéricos), pero sí le dará una ventaja inicial.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top