在单个代码行(命名空间)上禁用Stylecop

时间:2013-09-19 08:20:04

标签: c# namespaces stylecop suppress-warnings

我们有一个现有产品,我们希望实现StyleCop的使用。 但是,我们遇到了一个问题,那就是我们所有的命名空间都以小写字母(例如lowerCase.UpperCase.Etc.Etc.)开头,当然导致SA1300(元素必须以大写字母开头)规则在每​​一个都被破坏文件。

虽然,此时无法更改命名空间,因为它已经存在,我们有许多合作伙伴和客户已经实现了针对我们的API的接口,并且依赖于稳定的命名空间。我相信你明白改变的后果......

我们希望一般启用规则,但在命名空间行上暂时禁用。 尝试过:

[module: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Reviewed. Suppression is OK here.")]

如果我把它放在命名空间行之上就行了,但它基本上会完全禁用规则,这不是我们想要的,因为我们喜欢类和类成员的规则......

我希望有类似的东西:

#pragma warning disable SA1300
namespace lowerCase.UpperCase.Etc
{
#pragma warning enable SA1300

但据我所知,SA1300并非此类警告。

任何人都有一些如何解决这个问题的想法?

提前致谢!

2 个答案:

答案 0 :(得分:9)

有一种解决方法。

您可以这样写:

#region Generated Code
namespace lowerCase.UpperCase.Etc
{
#endregion

按照设计,Stylecop会忽略该区域内的所有内容,因为您已声明 “您不拥有代码,因此无法对样式负责”

但是有一条评论:区域内的所有规则都会被忽略,因此请确保在放置区域之前只有“不需要的”规则。

这个问题的起源实际上是另一个问题的小评论(甚至不是答案):Disable StyleCop for specific lines

答案 1 :(得分:0)

不幸的是,你想做的事情是不可能的。但是,StyleCop+包含更灵活的命名规则版本,允许您为命名空间名称指定不同于其他名称的格式。