问题 如何抑制StyleCop错误SA0102:CSharp.CsParser:使用泛型类型参数属性时,在文件中发现了语法错误


具有以下带有泛型类型参数属性的C#代码:

[System.AttributeUsage(System.AttributeTargets.GenericParameter)]
public class GenericParameterAttribute : System.Attribute
{
}
public class GenericClass<[GenericParameter] T>
{
}

打开StyleCop集成(在.csproj文件中导入StyleCop.targets) StyleCop返回错误并且编译失败:

错误1 SA0102:CSharp.CsParser:在文件中发现语法错误...

没有在.csproj文件中导入的StyleCop.targets编译好了。

环境

我在StyleCop文档站点上找不到代码SA0102 http://www.stylecop.com/docs/StyleCop%20Rules.html  - 似乎SA0102不是StyleCop规则,可能是内部StyleCop错误的代码。

那么问题:如何压制StyleCop错误SA0102?


5042
2017-12-13 09:47


起源

“在文件中发现了语法错误。”多么误导性的错误信息。它应该清楚错误来自Style Cop而不是编译器。你的代码很好,但是Style Cop无法应付 C#6。 - Colonel Panic


答案:


使用这种属性似乎无法抑制此错误:

[SuppressMessage("StyleCopNameSpace", "SA0102:RuleNameHere")] 

与此相关 岗位,当StyleCop遇到内部错误时显示此消息:

jasonall   2010年5月18日晚上10点:实际上无法抑制SA0101或SA0102。这些是特殊情况“规则”,只要StyleCop遇到内部错误就会抛出这些规则。您唯一的解决方法是完全禁用此文件,或者在升级到StyleCop 4.4之前停止使用可选参数。


8
2017-12-13 10:04



是的,使用[SuppressMessage]属性进行抑制不起作用 - 解析错误很少发生。但这篇文章帮助我找到了只为一个文件(右键单击它)而不是整个项目禁用StyleCop的方法。谢谢。 - Sergey Fadeev


在.csproj文件中查找要从StyleCop中排除的文件,并添加ExcludeFromStyleCop元素,如下所示

<Compile Include="<filename>.cs">
  <ExcludeFromStyleCop>True</ExcludeFromStyleCop>
</Compile>

3
2017-08-14 21:19



是的,它与在解决方案资源管理器中右键单击文件并在文件上下文菜单中选择从StyleCop中排除相同。谢谢。 - Sergey Fadeev
这不是解决方案,因为它也会抑制所有其他检查。这不是OP试图实现的目标。 - Imre Pühvel