2017-07-19 6 views
0

ConfigurationComment déboguer dans un code d'attribut provenant de Nuget?

J'ai une méthode avec un attribut que j'ai créé. J'ai empaqueté l'attribut dans un paquet de nuget (mode de symbole de débogage) comme je le fais quand je veux déboguer dans des paquets de nuget.

Question

Comment puis-je entrer dans cet attribut? Ai-je besoin de mettre un autre attribut "step into this" dans mon code d'attribut? J'ai seulement trouvé l'attribut que arrête mon de déboguer DebuggerStepThroughAttribute mais rien qui me permettra d'arrêter explicitement quand dans le débogage (dont vous n'avez naturellement pas besoin normalement).

J'espère avoir bien expliqué cela.

Modifier (plus d'info)

Jordan a suggéré d'appeler GetCustomAttributes dans la méthode, mais ce n'est pas une option (au moins dans mon cas). Mon attribut effectue une validation de jeton sur l'appel d'API de sorte que vous n'êtes pas autorisé (401) dans la méthode si le code dans l'attribut lui refuse l'accès. Et aussi je ne peux pas mettre un point de frein dans l'emballage de nuget, je dois être en mesure d'entrer dans ce code.

Edit 2 (enfin ... code)

Donc finalement il y a le code .. Je pense que je did't besoin d'un mais ici nous sommes :-).

J'ai implémenté mon propre attribut (comme vous pouvez le faire) où il y a du code dans lequel j'aimerais pouvoir déboguer.

public class TokenAuthenticate : ActionFilterAttribute, IAuthenticationFilter 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 

     base.OnActionExecuting(actionContext); 
    } 

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
     base.OnActionExecuted(actionExecutedContext); 
    } 

    public bool AllowMultiple => true; 

    public async Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken) 
    { 
     //... where I want to debug into 
    } 
} 

cet attribut, tout va sur la méthode ou la classe comme celui-ci [TokenAuthenticate]

+0

Les attributs sont des décorations et n'altèrent pas l'exécution sans réflexion. Quel attribut utilisez-vous et l'utilisez-vous correctement? Si vous essayez simplement d'instancier la classe décorée sans les frameworks associés, rien ne se passera jamais. –

+0

@MatthewWhited J'ai mis à jour la question avec du code. Je suis à peu près sûr que je l'utilise correctement. Je l'ai fait depuis longtemps mais je n'ai jamais eu mes attributs dans un paquet de nuget et j'avais besoin de déboguer dans le code. Je peux déboguer correctement si j'importe juste le projet de nuget dans ma solution. – Sturla

Répondre

0

Selon MSDN, Attributes sont instanciés paresseusement:

Il est important de noter que ces attributs des objets sont instancié paresseusement. C'est-à-dire, ils ne seront pas instanciés jusqu'à ce que vous utilisiez GetCustomAttribute ou GetCustomAttributes. Ils sont également instanciés chaque fois. Appeler GetCustomAttributes deux fois de suite renverra deux instances différentes de ObsoleteAttribute.

Si vous devez entrer dans les vous devriez être en mesure de le faire en appelant GetCustomAttributes sur le type en question et en plaçant un point de rupture dans la Attribute.

+0

Je ne suis pas tout à fait. Où voulez-vous que j'appelle GetCustomAttributes?Si je fais cela dans la méthode qui a l'attribut son en retard. Je vais mettre à jour ma question pour refléter cela. – Sturla

+0

@Sturla En regardant le code ci-dessus, y a-t-il un contrôleur sur lequel vous pouvez mettre un point de rupture, puis essayer de passer à travers de là? – Jordan

+0

Il y a un contrôleur et il a cet attribut en haut et même si je F11 du constructeur je ne frappe jamais le code d'attribut. Et j'ai fait doublement sûr que le paquet nuget a été construit dans le débogage. – Sturla