est-il possible de créer une méthode qui effectue une assistance de débogage comme le system.diagnostics.debug code> classe? p>
Je cherche un moyen de construire une méthode qui, lorsqu'elle est appelée par un assemblage compilé avec le symbole de compilation conditionnelle de débogage défini, entraîne une opération et qui est un non-op quand appelé par un assemblage sans le symbole sans le symbole défini . P>
Si possible, j'aimerais que cela soit possible pour les appels aux méthodes de débogage pour ajouter une surcharge minimale ou augmenter de taille à la version de libération de l'Assemblée. P>
Pour clarifier, les méthodes de débogage doivent être dans un ensemble compilé en mode de libération. Les appels vers les méthodes ne doivent générer que des opérations qu'à partir d'un assemblage avec le symbole de débogage défini dans la portée de l'appel de la méthode. P>
5 Réponses :
BTW Le code de la méthode étant appelée reste dans l'assemblage - ce sont les appels qui sont supprimés au temps de compilation p>
Bonus Topical Blog Post: http://blogs.msdn.com/ericlippert/archive/2009/09/10/What-s-the-ference-between-conditionnel-compilation-et-and- l'attribut.aspx p>
+1 Pour souligner que conditionné, ce n'est pas infaillible (cela signifie-t-il que c'est même conforme à CLI?) Que se passe-t-il pour les appels C ++ à Debug.writeline? Est-ce pour toutes les versions? IT / D Soyez agréable de vous avoir modifier cela dans: P
Je n'ai pas vraiment essayé. La page MSDN sur le conditionnelAttribute indique simplement que le compilateur C ++ n'est pas conforme, sans dire quelles versions.
Comme je l'ai dit dans la réponse ( et émettra toujours l'appel code>), le compilateur C ++ (je pense) émettra toujours des appels à Writeeline code>, même en libération.
Je pense que les méthodes non vides ou «sans paramètres» doivent être une erreur de compilation si le conditionnel est appliqué.
Si vous désassemblez System.Diagnostics.debug classe en utilisant réflecteur vous pouvez voir Ceci est fait en utilisant le [conditionnel ("débogage")] code> attribut:
Si vous avez besoin d'une autre signature que de module de fonctionnement (..) sans paramètres,
Ce qui n'aurait faux pas avec Il est plus verbeux et moins élégant que le conditionnelattribute, mais cela vous permettrait une signature plus flexible. P> P>
Pourquoi ne pas essayer quelque chose comme ça?
Cela crée un problème où la méthode n'existe pas lors de la compilation sous une construction non déboguée. Tout code essayant d'appeler cette méthode ne compilerait alors pas. La classe code> de débogage code> est des méthodes que vous pouvez appeler du code de débogage, mais à laquelle les appels sont supprimés lors de la compilation du code de version.
@Tragedian Même avec les problèmes que vous avez mentionnés peut être une solution supérieure dans certaines circonstances. Ceci est une réponse valide aussi longtemps que ce que vous avez mentionné est pris en compte.