After unifying understanding of what good code looks like in my team I tried to configure tools that could help us in striving for this goal. We all use ReSharper, but built-in settings sharing mechanism doesn’t support our use scenario well enough. We are maintaining system of systems, we are working with multiple code repositories on daily basis. Rules for nice code stay the same in each of these, same as domain language, recognized abbreviations and so on.
StyleCop seems to understand and support such usage scenario. StyleCop sequentially scans all parent directories, starting from analyzed file’s location, up to drive root in search for settings files. All files get merged to form effective results set.
Fortunately there is a plugin for ReSharper that can do the same, it’s called “ReSharper Solution Settings Autodiscovery“. It only requires to adjust settings file name – it has to match *.AutoLoad.DotSettings pattern. This plugin integrates super-nicely with ReSharper.
In my team we have dropped all project-specific StyleCop and ReSharper settings files in favor of shared ones. Only thing to remember is that when adjusting the settings they should be saved to this shared settings layer.
To keep settings up to date and track the changes we have made root directory of cloned repos just another repository. Thanks to .gitignore that looks like this:
* !Settings.StyleCop !TeamGlassCheck.AutoLoad.DotSettings !.gitignore
this tracks only files that we want to track here (tools settings files).
As a cherry on a cake automatic pull/commit+push tasks can be added to system scheduler, to make sure that setting are always up to date.