Facile d'injecter du code à toutes les méthodes et propriétés qui n'ont pas d'attribut personnalisé

Il y a beaucoup de questions et de réponses autour de AOP dans .NET ici sur Pile Overflow, souvent de mentionner PostSharp et d'autres produits tiers. Il semble donc y avoir une variété de l'AOP optons dans le .NET et C# monde. Mais chacun de ceux a ses restrictions, et après le téléchargement de la promesse de PostSharp j'ai trouvé dans leur documentation que "des méthodes de virtuelle", afin d'être en mesure d'injecter du code (edit: voir ChrisWue la réponse de mon commentaire - le virtuel contrainte doit avoir été sur l'un des prétendants, je suppose). Je n'ai pas enquêté sur l'exactitude de cette déclaration, mais c'est categoricality m'a fait revenir en arrière à Pile Overflow.

Donc je voudrais avoir une réponse à cette question très précise:

Je veux injecter simple "si (condition) de la Console.WriteLine" style code de chaque méthode et de propriété (statique, scellé, interne, du virtuel, de la non-virtuel, n'a pas d'importance) dans mon projet, qui n'ont pas d'annotations personnalisées, afin de testez mon logiciel au moment de l'exécution. Cette injection de code ne doit pas rester dans la version de publication, il est conçu pour l'essai dynamique (thread) au cours du développement.

Quelle est la meilleure façon de le faire? Je suis tombé sur Mono.Cecil, qui a l'air idéal, sauf que vous semblez avoir à écrire le code que vous voulez injecter dans IL. Ce n'est pas un énorme problème, il est facile à utiliser en Mono.Cecil pour obtenir un IL version de code écrit en C#. Mais néanmoins, si il y avait quelque chose de plus simple, idéalement même, construite dans .NET (je suis toujours sur .NET 3.5), je voudrais savoir. [Mise à jour: Si l'outil n'est pas de la partie .NET Framework, il serait bien si c'était open-source, comme Mono.Cecil, ou librement disponible]

votre pédant de l'édition est tout beau et bien (si c'est nécessaire, c'est une autre question), mais en changeant de "SI" pour "Stack Overflow" vous avez détruit ma "(==carré?)" jeu de mots.

OriginalL'auteur Eugene Beresovsky | 2011-07-12