10

我的代码包含一个名为“m_d3dDevice”的变量。

StyleCop 抱怨这个名字:

SA1305:变量名称“m_d3dDevice”以看起来像匈牙利表示法的前缀开头。删除前缀或将其添加到允许的前缀列表中。

(请注意,我已手动禁用 SA1308(“m_”),这是我愿意违反的少数规则之一。)

我不能在匈牙利选项卡中允许“d3d”作为例外,因为它只允许 1 或 2 个字符前缀,并且允许“d3”没有帮助。我已经尝试了所有我能想到的将“d3d”添加到我的 CustomDictionary 文件(无论如何文档暗示 CustomDict 不用于规则 1305)。

有什么建议可以让 StyleCop 允许这个吗?现在不必对我的变量进行 F2 是一件值得骄傲的事情。

4

4 回答 4

12

您还可以根据具体情况禁止 stylecop。例如

[System.Diagnostics.CodeAnalysis.SuppressMessage(
    "Microsoft.StyleCop.CSharp.NamingRules",
    "SA1305:FieldNamesMustNotUseHungarianNotation",
    Justification = "Using Win32 naming for consistency.")]
IntPtr hFile;

如果您有许多冒犯性的名字,这可能不是一个有吸引力的选择,但对于一两个来说,这通常没问题。

于 2013-04-24T17:38:16.093 回答
8

您还可以使用Settings.StyleCop包文件中的 来配置设置。

您可以通过将以下代码添加到Settings.StyleCop文件中来抑制特定单词:

<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
  <AnalyzerSettings>
    <CollectionProperty Name="Hungarian">
      <Value>as</Value>
      <Value>do</Value>
      <Value>id</Value>
      <Value>if</Value>
      <Value>in</Value>
      <Value>ip</Value>
      <Value>is</Value>
      <Value>mx</Value>
      <Value>my</Value>
      <Value>no</Value>
      <Value>on</Value>
      <Value>to</Value>
      <Value>ui</Value>
      <Value>vs</Value>
      <Value>x</Value>
      <Value>y</Value>
      <Value>z</Value>
      <Value>iOS</Value>
      <Value>IOS</Value>
    </CollectionProperty>
  </AnalyzerSettings>
</Analyzer>

Hungarain您可以通过将以下内容添加到Settings.StyleCop文件来禁止规则本身

<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
  <Rules>
   <Rule Name="FieldNamesMustNotUseHungarianNotation">
    <RuleSettings>
     <BooleanProperty Name="Enabled">
        False
     </BooleanProperty>
    </RuleSettings>
   </Rule>
 </Rules>
</Analyzer>
于 2017-08-10T07:07:29.417 回答
7

你可以看看StyleCop+。它包含灵活的命名规则,允许您强制所有私有字段以“m_”(或任何您希望的名称)开头,而不是禁用名称检查(就像您所做的那样)。

关于“d3dDevice”——这是一个非常有趣的案例。从逻辑上讲,它分为以下单词 - { "d", "3", "d", "Device" } 或 { "d3", "d", "Device" }。第二个“d”似乎不遵循“camelNotation”。

但是,我坚信静态分析(尤其是命名)应该足够灵活以满足用户需求。目前 StyleCop+ 可以通过以下方式支持您的案例 - 例如,您可以将“异常”(任意数量)添加到私有字段的命名模板,使其看起来像:

m_$(aaBb)
m_d3d$(AaBb)

这更有可能是解决方法,但我会考虑你的“d3d”案例——也许 StyleCop+ 会支持这样的东西。

感谢您提供有趣的示例!

于 2011-02-01T05:16:48.437 回答
0

添加抑制属性应该在所有方法之上完成,这需要时间和漫长的过程。

如果您想从项目中删除此规则,请尝试此

  • 右键单击您的项目
  • 选择 Stylecop 设置
  • 查找 SA1305
  • 从结果集中取消选中规则
  • 单击应用 - 确定
  • 重新运行风格警察规则。
于 2017-02-09T20:27:22.877 回答