C#+ StyleCop + MSBuild +全局文化设置无法获取

时间:2012-09-20 14:24:03

标签: c# msbuild culture stylecop

我已经设置了我的C#项目文件来导入一个StyleCop.Targets项目,该项目在构建时运行所有StyleCop规则。这很棒,我在通过Visual Studio进行编译时将项目误差为零。

然而,当我通过MSBuild编译(在同一台机器上)时,我会遇到错误:

The documentation text within the constructor's summary tag must begin with the text: Initializes a new instance of the <see cref="MyClass" /> class.

在初始化时关注'Z'...我已经使用 en-GB 全局设置配置了我的Settings.StyleCop,这样我就不会在代码中获得有关Americanisms的错误。但是我无法理解为什么这会导致MSBuild中的错误。

我知道MSBuild正在使用相同的Settings.StyleCop文件,就像我更改规则(比如TabsMustNotBeUsed)一样,MSBuild(和Visual Studio)会选择此更改并在整个地方抛出错误。

我正在使用StyleCop 4.7,Visual Studio 2012和MSBuild 4。

以下是我的Settings.StyleCop文件的片段:

<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>

任何线索?

干杯!

1 个答案:

答案 0 :(得分:2)

我假设您正在使用最新版本的StyleCop(4.7.41.0)或接近该版本的版本。 4.7版本中有很多更改和修复,并且已经发布了相当规律的更新。

我猜测文化层次结构中必须有另一个Settings.StyleCop文件(在子文件夹中)下调,将文化设置回 en-US 。修改此特定设置文件中的其他规则(如TabsMustNotBeUsed)仍将按预期运行,只要您不在其他设置文件中再次设置它。可能的原因可能是正在运行StyleCop的工作文件夹。

我建议您在文件系统中快速扫描以查看是否可以找到任何其他设置文件,如果找到,请检查其文化设置。

我所做的另一个技巧是停止在解决方案根目录下合并设置文件。这可以通过添加以下设置来完成:

<GlobalSettings>
    <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
</GlobalSettings>

这将确保StyleCop在所有开发和构建计算机上的行为相同,无论在层次结构中较高的位置配置哪些设置(例如StyleCop应用程序文件夹中的设置)。但是,如果执行此操作,请确保从不再合并的文件中复制所有必需的设置。从您的描述中我怀疑这将解决这个特定的问题,但我发现它有助于保持规则的一致性。