4

我已经将我的 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,这样我就不会在代码中收到有关美国主义的错误。但是我无法理解为什么这会导致 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>

有什么线索吗?

干杯!

4

1 回答 1

2

我假设您使用的是最新版本的 StyleCop (4.7.41.0) 或接近该版本的版本。在 4.7 版本行中进行了很多更改和修复,并且发布了相当定期的更新。

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

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

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

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

这将确保 StyleCop 在所有开发和构建机器上的行为相同,而不管层次结构更高层配置的设置(例如 StyleCop 应用程序文件夹中的设置)。但是,如果您这样做,请确保从不再合并的文件中复制所有必需的设置。根据您的描述,我怀疑这是否能解决这个特定问题,但我发现它有助于保持规则的一致性。

于 2012-11-07T08:36:42.397 回答