Как подавить предупреждение анализатора кода для всех DataTable, которые используются без вызова Dispose?
У меня есть методы, которые формируют и возвращают таблицы DataTable. Анализатор кода на эти методы выдаёт предупреждение такого вида:
Warning 1 CA2000 : Microsoft.Reliability : In method 'DataTableSaver.ReadDataTable(Stream)', object 'ret' is not disposed along all exception paths. Call System.IDisposable.Dispose on object 'ret' before all references to it are out of scope.
Класс DataTable не имеет своего собственного метода Dispose, этот метод унаследован от MarshalByValueComponent и ничего существенного не делает. Поэтому я не хочу загромождать код заведомо ненужными вызовами, лишь бы анализатор не ругался. Соответственно, чтобы убрать ложную тревогу, необходимо подавить это предупреждение.
В идеале я хотел сделать так: пометить сборку:
[assembly:SuppressMessage("Microsoft.Reliability", "CA2000:DisposeObjectsBeforeLosingScope", Target="System.Data.DataTable")]
Не сработало. Путём экспериментов я выяснил, что предупреждение можно подавить, только если либо у каждого метода, где оно возникает, прописать SupressMessage, либо сделать кучу почти одинаковых записей в GlobalSupressions.cs. Но мне такое решение кажется не вполне корректным. Во-первых, это нарушает принцип DRY. Во-вторых, совместно с DataTable у меня могут в тех же методах использоваться другие типы данных, требующие вызова Dispose, и подавив предупреждение таким способом, я могу пропустить связанные с этим ошибки. При корректном решении анализатор кода должен игнорировать именно DataTable, а не конкретные места в моём коде.
Ещё на сайте Microsoft написано про какой-то editorconfig, но при этом не разъясняется, что это за editorconfig, как его создать, шаблона такого элемента в Visual Studio тоже нет. Я попробовал положить в директорию проекта файл .editorconfig с таким содержимым:
dotnet_code_quality.CA2000.excluded_symbol_names = System.Data.DataTable
Тоже не работает. Причём не работает, даже если прописать значение, взятое из атрибута в GlobalSupressions.cs. Т.е., в editorconfig не работает даже то, что можно сделать с использованием атрибутов.