2010-05-06 2 views
2

Je crée un certain nombre de compléments pour l'API Revit Structure. Chaque outil doit avoir une classe qui implémente l'interface IExternalCommand.Comment générer une erreur de compilation basée sur un attribut manquant en C#?

Dans la dernière version de Revit, pour votre outil pour vous travailler besoin d'avoir deux attributs de la classe qui implémente cette interface:

[régénération (RegenerationOption.Manual)] [Transaction (TransactionMode.Automatic) ]

Les valeurs entre parenthèses peuvent changer, mais il doit y avoir quelque chose. Souvent, je me retrouve à oublier de mettre les attributs, puis quand il s'agit de l'exécution, il se bloque. Est-il possible dans Visual Studio 2010 d'ajouter un avertissement ou une erreur du compilateur indiquant que si votre classe implémente cette interface, elle doit avoir ces deux attributs? J'ai resharper si cela aide.

Quelqu'un peut-il me diriger dans la bonne direction?

+0

Très proche: http://stackoverflow.com/questions/19454/enforce-attribute-decoration-of-classes-methods – Aaronaught

+0

sorte de, mais je suis après une erreur de compilation, ce code n'est pas sous test unitaire (pour diverses raisons) – RodH257

Répondre

4

Malheureusement non. (Je ne sais pas à propos de Resharper, cependant)

Si vous avez VS2010 Ultimate, vous pouvez écrire une règle d'analyse de code personnalisée.

2

Pas pendant la compilation, mais je pense que ce serait facile avec la réflexion.

Je suggère un programme séparé qui utilise la réflexion pour examiner votre assembly compilé, trouve toutes les classes avec l'interface spécifiée, puis vérifie les attributs de ces classes, renvoyant un message d'erreur sympa sympa très rapidement.

Vous devez toujours exécuter ce programme après avoir compilé votre programme, mais en fonction de votre IDE, vous pouvez le définir comme une étape de post-construction.

Questions connexes