【问题标题】:C# + StyleCop + MSBuild + Global culture settings failing to be picked upC# + StyleCop + MSBuild + 全球文化设置未能被拾取
【发布时间】:2023-08-05 16:03:01
【问题描述】:

我的 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 文件的 sn-p:

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

有什么线索吗?

干杯!

【问题讨论】:

    标签: c# msbuild culture stylecop


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 一个月后重新审视这个,就像你说的,有一个更新版本的 StyleCop。在更新并且不执行任何代码更改之后,本地化开始像魅力一样工作。我确实调查了设置从子文件夹级联下来的可能性,但在那里什么也看不到。为帮助干杯!
    • 请注意,安装文件夹中还有一个“默认”设置文件(很可能是C:\Program Files\StyleCop 4.7)。这通常包含*设置文件。