2009-11-20 15 views
9

Estoy tratando de descompilar una biblioteca pero cuando hago clic en un nombre de clase o un nombre de método, el código de implementación está vacío.Reflector doens't show class implementation

Por ejemplo:

public bool MethodOne(string str) 
{ 
    // nothing 
} 

Cuál podría ser?

+2

podría ser el método en realidad está vacía ... – Randolpho

+1

Sé que colocó la palabra pública de su método de ejemplo, pero podría ser un método abstracto o simplemente un método vacío a ser anulado si es necesario? – Dan

+0

Es una biblioteca que uso en un proyecto y funciona. No es un método abstracto o virtual. ¿Es posible "quitar/ocultar" el código de una biblioteca con un método de ofuscación? –

Respuesta

2

Es posible que haya abierto un conjunto de referencia o un PIA que no tenga código.

El cuerpo del método podría estar vacío.

(Otras posibilidades?)

+0

mmm Lo uso en un proyecto y funciona ... ¿Dónde podría estar el código? : P –

0

¿Qué versión de la framwork .Net se lo utiliza? Parece que hay algún problema con los ensamblados .NET 4.0 donde esto sucede ... o eso es lo que dicen algunas personas en los foros: Reflector Forum

¿Hay alguna IL?

+0

Está utilizando Micro Framework 4.0 y no hay ningún IL :( –

+0

Supongo que Red Gate aún no ha terminado ese código. Si no está utilizando un prelanzamiento de Reflector, puede intentarlo (http : //www.red-gate.com/MessageBoard/viewforum.php? f = 109) –

2

He visto esto también con los conjuntos VSSDK.

Podría ser una biblioteca de interfaz pública, pero la implementación real está 'oculta' en alguna parte. (? Tal vez en la GAC)

El tren básico de pensamiento es:

  1. código Compilar contra algunos 'trozo' de montaje
  2. Cuando se ha seleccionado la aplicación, el conjunto de talón no se resuelve, pero la uno real

Le sugiero que coloque un punto de interrupción en el depurador, y vea cuál es el ensamblaje cargado real y de dónde se carga.

23

Puede estar intentando reflejar los ensamblados de referencia utilizados por Visual Studio para proporcionar compatibilidad con múltiples direcciones. Estos ensamblados son solo de metadatos y no tienen ninguna implementación real.

Si ese es el caso, puede usar VSCommands 2010 extension para obtener la ruta al ensamblado real con la implementación.

assembly details http://vscommands.com/wp-content/uploads/2011/04/image12.png

+6

Esta es la respuesta. Las versiones de los metadatos solo residen en "Conjuntos de referencia" en los archivos de programa. Debe abrir las versiones en Windows \ microsoft.net \ framework \ .... – Will

+0

Lamentablemente, el enlace al blog ya no funciona, pero esta respuesta y la de @leppie me ayudaron mucho.En una nota al margen: la función "Mostrar detalles de ensamblaje" de VSCommands no aparece en la lista de características de las versiones más recientes de la extensión (todavía no he probado esta extensión). –