2009-11-20 13 views
9

Sto tentando di decompilare una libreria ma quando faccio clic su un nome di classe o su un nome di metodo, il codice di implementazione è vuoto.Reflector non mostra l'implementazione della classe

Ad esempio:

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

Cosa potrebbe essere?

+2

potrebbe essere il metodo in realtà è vuoto ... – Randolpho

+1

So che è stato inserito la parola pubblica sul tuo metodo di esempio, ma potrebbe essere un metodo astratto o semplicemente un metodo vuoto per essere sovrascritto in caso di necessità? – Dan

+0

È una libreria che utilizzo in un progetto e funziona. Non è un metodo astratto o virtuale. È possibile "rimuovere/nascondere" il codice da una libreria con un metodo di offuscamento? –

risposta

2

Potrebbe essere stato aperto un assembly di riferimento o un PIA che non contiene il codice.

Il corpo del metodo potrebbe essere effettivamente vuoto.

(Altre possibilità?)

+0

mmm Lo uso su un progetto e funziona ... Dove potrebbe essere il codice? : P –

0

Quale versione del framwork Net è che usando? Sembra esserci qualche problema con gli assembly .net 4.0 dove questo accade ... o questo è quello che dicono alcune persone nei forum: Reflector Forum

C'è qualche IL?

+0

Sta usando Micro Framework 4.0 e non c'è alcun IL :( –

+0

La mia ipotesi è, Red Gate non ha ancora finito quel codice. Se non si utilizza una pre-release di Reflector si potrebbe provare (http : //www.red-gate.com/MessageBoard/viewforum.php? f = 109) –

2

Ho visto questo anche con i gruppi VSSDK.

Potrebbe essere una libreria di interfaccia pubblica fornita, ma l'implementazione effettiva è "nascosta" da qualche parte. (? Forse in GAC)

Il treno di base del pensiero è:

  1. codice Compile contro alcuni 'stub' assemblaggio
  2. Quando caricati nell'applicazione, l'assemblea stub non viene risolto, ma la attuale

Suggerisco di inserire un punto di interruzione nel debugger e di vedere quale è l'assembly caricato effettivo e da dove viene caricato.

23

Si sta tentando di riflettere gli assembly di riferimento utilizzati da Visual Studio per fornire supporto multi-targeting. Questi assembly sono solo per metadati e non hanno alcuna implementazione effettiva.

Se questo è il caso, è possibile utilizzare VSCommands 2010 extension per ottenere il percorso dell'assieme effettivo con l'implementazione.

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

+6

Questa è la risposta.Le versioni dei metadati solo risiedono in "Reference Assembly" sotto i file di programma. Devi aprire le versioni in windows \ microsoft.net \ framework \ .... – Will

+0

Purtroppo il collegamento al post del blog non funziona più, ma questa risposta e quella di @leppie mi hanno aiutato molto.Nota a margine: la funzione "Mostra dettagli di assemblaggio" di VSCommands non compare nell'elenco delle funzionalità delle versioni più recenti dell'estensione (non ho ancora provato questa estensione). –

Problemi correlati