Я использую инструмент FxCopCmd для статического анализа кода. Поскольку у нас уже была огромная кодовая база, мы выявили существующие проблемы с помощью инструмента baseline.exe, который поставляется с FxCop.
Я заметил, что если я добавлю новый метод в свой класс C #, то некоторые сообщения о подавлении в файле GlobalSuppression.cs перестанут работать, и у меня возникнут проблемы с кодом, который я не касался.
Пример:
namespace ConsoleApplication1
{
class Program
{
public async Task<string> method1()
{
string a = "";
a.Equals("abc", StringComparison.InvariantCultureIgnoreCase);
return a;
}
static void Main(string[] args)
{
}
}
}
Это вызывает следующую ошибку:
CA1031: Microsoft.Design: измените Program.d__0.MoveNext (), чтобы перехватить более конкретное исключение, чем Exception, или повторно выбросить исключение.
Чтобы подавить проблему CA1309 UseOrdinalStringComparison, я добавил следующее сообщение о подавлении в файл GlobalSuppression.cs
[модуль: SuppressMessage ("Microsoft.Globalization", "CA1309: UseOrdinalStringComparison", Scope = "member", Target = "ConsoleApplication1.Program.d__0.MoveNext ()", MessageId = "System.String.Equals (System.String, System.StringComparison) ", Justification =" ")]
Но если я добавлю в класс еще один метод, это сообщение о подавлении перестанет работать. Это потому, что method1 является асинхронным, и поэтому создается новый класс (сослаться на это) в скомпилированном коде (который был <method1>d__0
в первом случае). Но когда я добавляю еще один метод перед method1, тогда новый класс, созданный в скомпилированном коде, называется <method1>d__1
. Следовательно, сообщение о подавлении не применяется, и FxCop снова начинает показывать ошибки в коде.
Есть ли способ навсегда подавить ошибки FxCop для асинхронных методов?
namespace ConsoleApplication1 { class Program { string b = ""; public async Task<string> method1() { string a = ""; try { a.Equals("abc", StringComparison.InvariantCultureIgnoreCase); throw new NotSupportedException(); } catch (Exception) { Console.WriteLine("TP"); } return a; } static void Main(string[] args) { } } }
- person Gaurav Deshmukh   schedule 17.11.2016