我们正在尝试使用VS2015 Enterprise的SonarLint,但遇到了一个令人恼火的问题,除非我们解决它,否则可能会成为一个阻碍。酷睿i5处理器,8GB内存,大型SSD,Windows 7 Pro:
我们有大量相同警告代码的遗留警告(例如S1444)。我可以使用现有的代码,但希望在将来的工作中捕捉它们,所以我希望抑制现有的警告,但在代码中不要有混乱的杂注。因此,我在错误列表屏幕中多选它们,然后右键单击,然后单击抑制文件中的在相应的项目中创建并更新GlobalSuppressions文件。
但是,警告将继续显示。我清理并重新生成解决方案,"已抑制"警告继续显示,抑制状态仍然为"活动"(我猜这意味着"未抑制")。
这意味着几乎(或者实际上可能)不可能消除旧的警告,从而使新的警告明显暴露出来,这就是演习的全部意义。
这是bug还是我遗漏了什么?
我还注意到,有时rt单击上下文菜单包含Suppress->,而其他时候则不包含。这是怎么回事?
我无法重现您所面临的问题。我已经创建了一个ConsoleApplication (C#)
并使用了默认代码。然后,我选择了所有问题,右键单击并在抑制文件中禁止。我尝试重建、清理、重新启动VS,但警告不再显示。
程序.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication14
{
class Program
{
static void Main(string[] args)
{
}
}
}
GlobalSuppression.cs
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Sonar Code Smell", "S1172:Unused method parameters should be removed", Justification = "<Pending>", Scope = "member", Target = "~M:ConsoleApplication14.Program.Main(System.String[])")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Sonar Code Smell", "S1186:Methods should not be empty", Justification = "<Pending>", Scope = "member", Target = "~M:ConsoleApplication14.Program.Main(System.String[])")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Sonar Code Smell", "S1118:Utility classes should not have public constructors", Justification = "<Pending>", Scope = "type", Target = "~T:ConsoleApplication14.Program")]
我使用的是最新的SonarLint版本(2.9.0.384)。你能创建一个简单的repo案例吗?这样我就可以使用它来了解发生了什么?
- 在项目中添加GlobalSuppressions.cs文件
- 只需使用";模块";作为范围。在这种情况下,目标也是不必要的
这种情况会抑制项目或程序集中类别的所有警告。
例如:
[assembly: SuppressMessage("Major Code Smell", "S1066:Collapsible "if" statements should be merged", Justification = "<Pending>", Scope = "module")]