views:

85

answers:

2

I create a number of add-ins for the Revit Structure API. Each tool has to habe a class which implements the interface IExternalCommand.

In the latest version of Revit, for your tool to work you need to have two attributes on the class that implements that interface:

[Regeneration(RegenerationOption.Manual)] [Transaction(TransactionMode.Automatic)]

The values in brackets can change, but there must be something there. Often I am finding myself forgetting to put the attributes on, then when it comes to runtime it crashes. Is there any way in Visual Studio 2010 to add a compiler warning or error saying that if your class implements that interface it must have those 2 attributes? I have resharper if that helps.

Can anyone point me into the right direction?

+4  A: 

Unfortunately not. (I don't know about Resharper, though)

If you have VS2010 Ultimate, you could write a custom Code Analysis rule.

SLaks
+2  A: 

Not during compile time, but I think it'd be easy to with reflection.

I suggest a separate program that uses reflection to examine your compiled assembly, finds all classes with the specified interface, then checks attributes on those classes, returning a nice friendly error message very quickly.

You'd still have to run this program after you compile your program, but depending on your IDE, you could set it as a post-build step.

abelenky