Comment obtenir toutes les références avec Reflection + C #

En utilisant System.Reflection, je peux obtenir toutes les méthodes d’une classe spécifique

J’ai besoin de savoir quelles sont les références à ces méthodes. Par exemple: dans Visual Studio, si vous voulez les références d’un object spécifique

  • clic droit sur l’object et sélectionnez “Trouver toutes les références”
  • Visual Studio affiche les références de cet object sélectionné

Je veux faire la même chose, mais à partir de code avec reflection ou d’une autre manière.

Puis-je faire ceci?

Cela ne peut pas être fait avec reflection. La reflection est un outil d’inspection des métadonnées et des assemblages. Afin de trouver toutes les références à une méthode / type donnée, vous devez inspecter l’IL sous-jacent d’un assembly. Reflection n’a que des capacités IL très limitées (le renvoie simplement sous forme de tableau d’octets). Vous aurez besoin d’inspecter ce stream d’octets de manière personnalisée afin de rassembler tout contexte sur ce à quoi il fait référence.

Ce n’est pas quelque chose qui est directement accessible via une reflection d’exécution sur une classe spécifique. Vous devrez examiner toute l’arborescence du code source ou l’IL résultante pour déterminer si les références à une méthode particulière portant le même nom constituent la surcharge et la signature appropriées pour la méthode à laquelle vous essayez de faire référence.

De plus, sans travail supplémentaire, vous ne trouverez jamais de références à une méthode spécifique qui sont elles-mêmes invoquées via une reflection. (C’est une des raisons pour lesquelles masquer ce type de code est difficile et source d’erreurs.)

Si vous cherchez uniquement à trouver les références à des fins d’information, Reflector est doté de cette fonctionnalité.

http://www.red-gate.com/products/reflector/

Microsoft a publié les projets Common Comstackr Infrastructure sous une licence open source. Ces projets visent à prendre en charge de nombreuses fonctionnalités liées au compilateur, y compris l’parsing d’assemblages, comme vous le dites. La documentation est limitée, vous devez donc bien comprendre ECMA-335 (Common Language Infrastructure) pour l’utiliser efficacement à vos fins.

Il n’y a pas d’échantillons de code magique ici. Il s’agit d’une tâche volumineuse et assez compliquée, dans laquelle vous passerez presque tout votre temps.