I've got my C# project file set up to import a StyleCop.Targets project that runs all the StyleCop rules on build. This is great and I've got the project down to zero errors when compiling through Visual Studio.
However when I compile through MSBuild (on the same machine) I get errors along the line of :
The documentation text within the constructor's summary tag must begin with the text: Initializes a new instance of the <see cref="MyClass" /> class.
Focus on the 'Z' in initialises... I've configured my Settings.StyleCop with an en-GB global setting so that I don't get errors about Americanisms within the code. However I can't fathom out why this causes errors in MSBuild.
I know MSBuild is using the same Settings.StyleCop file as if I change a rule (say TabsMustNotBeUsed) MSBuild (and Visual Studio) picks this change up and throws errors all over the place.
I am using StyleCop 4.7, Visual Studio 2012 and MSBuild 4.
Here is a snippet of my Settings.StyleCop file :
<StyleCopSettings Version="105">
<GlobalSettings>
<StringProperty Name="Culture">en-GB</StringProperty>
</GlobalSettings>
<Parsers>
<Parser ParserId="StyleCop.CSharp.CsParser">
<ParserSettings>
<BooleanProperty Name="AnalyzeDesignerFiles">False</BooleanProperty>
</ParserSettings>
</Parser>
</Parsers>
<Analyzers>
<Analyzer AnalyzerId="StyleCop.CSharp.SpacingRules">
<Rules>
<Rule Name="TabsMustNotBeUsed">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
<AnalyzerSettings />
</Analyzer>
</Analyzers>
</StyleCopSettings>
Any clues ?
Cheers!
I'm assuming you're using the latest version of StyleCop (4.7.41.0) or a version close to that. There have been a lot of changes and fixes in the 4.7 version line, and there have been fairly regular updates released.
I'm guessing that there must be another Settings.StyleCop file lower down (in a sub-folder) in the folder hierarchy that is setting the culture back to en-US. Modifying other rules in this particular settings file (like TabsMustNotBeUsed) will still behave as expected as long as you're not setting it again in the other settings file. A potential cause could be the working folder that StyleCop is being run from.
I suggest doing a quick scan in your file system to see if you can find any other settings files, and if found, check their culture setting.
Another trick I've done is to stop merging in settings files at the solution root. This can be done by adding the following setting:
<GlobalSettings>
<StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
</GlobalSettings>
This will ensure that StyleCop acts the same on all development and build machines, regardless of the settings configured higher up the hierarchy (such as the one in the StyleCop application folder). However if you do this, make sure you copy all the required settings from the files no longer being merged. From your description I doubt that this will solve this particular problem, but I have found it useful to help retain rule consistency.