我的代码包含一个名为“m_d3dDevice”的变量。
StyleCop抱怨这个名字:
SA1305:变量名称 'm_d3dDevice'以前缀开头 看起来像匈牙利符号。 删除前缀或将其添加到 允许的前缀列表。
(注意我手动禁用了SA1308(“m_”),这是我愿意不服从的少数规则之一。)
我不能允许“d3d”作为匈牙利标签中的例外,因为它只允许1或2个字符前缀,并且允许“d3”没有帮助。我已经尝试了一些我能想到的将“d3d”添加到我的CustomDictionary文件中(无论如何,文档暗示CustomDict不用于规则1305)。
任何使StyleCop的建议允许这个?现在不用为我的变量而感到骄傲。
答案 0 :(得分:12)
您还可以根据具体情况抑制stylecop。 e.g。
[System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.StyleCop.CSharp.NamingRules",
"SA1305:FieldNamesMustNotUseHungarianNotation",
Justification = "Using Win32 naming for consistency.")]
IntPtr hFile;
如果您有许多违规名称,这可能不是一个有吸引力的选择,但对于一两个,这通常很好。
答案 1 :(得分:6)
您可以查看StyleCop+。 它包含灵活的命名规则,允许您强制所有私有字段以“m_”(或任何您希望的方式)开头,而不是禁用名称检查(就像您一样)。
关于“d3dDevice” - 这是一个非常有趣的案例。逻辑上,它分为以下单词 - {“d”,“3”,“d”,“Device”}或{“d3”,“d”,“Device”}。第二个“d”似乎不遵循“camelNotation”。
但是,我坚信静态分析(特别是命名)应该足够灵活以满足用户需求。目前,StyleCop +可以通过以下方式支持您的案例 - 例如,您可以将“例外”(根据需要)添加到私有字段的命名模板中,以便它看起来像:
米_ $(AABB)
m_d3d $(AABB)
这更有可能是解决方法,但我会考虑你的“d3d”案例 - 也许StyleCop +会支持这样的事情。
感谢您提供有趣的示例!
答案 2 :(得分:5)
您还可以使用包文件中的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>
答案 3 :(得分:0)
添加抑制属性应该在所有需要时间和漫长过程的方法之上完成。
如果您想从项目中删除此规则,请尝试以下