FxCop displays particular vehemence towards static constructors: it actually displays vehemence towards a lot of things but time is short. The argument proposed by the FxCop documentation is that, "Initializing static data in explicit static constructors results
in less performant code.", which is fair enough. But what if the static constructor is being used for
more then just initialising static data?
For example I use a static logging class and initialise the logger in the static constructor. The logger is thread safe and I prefer to have a one stop shop for logging to make it for application wide changes. But back to the original question, why does FxCop
object to static constructors when they present a valid useful purpose? Is there a reason why thread safe static constructors should be avoided?