Можно ли установить Resharper для предупреждения, если IDisposable не обрабатывается правильно?

Есть ли параметр в Resharper 4 (или даже сама Visual Studio …), который вызывает предупреждение, если я забываю обернуть код в using блоке или опустить соответствующий вызов Dispose в блоке finally ?

Правильный автоматический анализ Dispose требует DFA (анализ streamа данных) глобальным способом. Маловероятно, что вы создаете объект IDisposable и не вызываете на нем никакого метода и не передаете его в качестве аргумента. Если одноразовый объект передается другим методам (включая вызов его членов, когда «это» неявно передается), инструмент должен проанализировать, не вызывается ли Dispose внутри, или что этот объект не хранится где-то для последующего удаления.

Тем не менее, наивная реализация проверки того, действительно ли располагаемый объект фактически размещен с конструкцией «использования» или каким-либо другим способом, даст слишком много ложных срабатываний и сделает анализ бесполезным.

Недовольство существующими методами, я создал свой собственный: EyeDisposable . Это прибор для ИИ, поэтому он должен улавливать много утечек, не попавших под статический анализ. Это все еще на ранней стадии.

Вы можете создать небольшую надстройку для R #, которую вы могли бы запустить внутри редактора кода, который сканирует код и обновляет анализ кода, чтобы отразить то, что вы являетесь объектом, у которого отсутствует структура, которую вы только что описали.

Я бы рассмотрел архитектуру плагина R #, если вы решите пойти по этому маршруту.

См. Это сообщение в блоге для некоторых трюков для тестирования Dispose() в DEBUG . В принципе, напишите деструктор только для DEBUG, который утверждает, что вы были утилизированы.

Вы можете посмотреть на FXCop для этого: http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx

Жаль, что R # не справляется с этим, даже если это предупреждение для полей вашего classа и / или переменных, которые вы создаете.

  • C # DateTime в формате "YYYYMMDDHHMMSS"
  • Уникальное генерирование случайных строк
  • ASP.NET Web API: правильный способ возврата 401 / несанкционированного ответа
  • Удаление десериализации JSON в .NET-объект с использованием Newtonsoft (или LINQ to JSON, возможно?)
  • Объединение двух списков вместе
  • Почему этот код недействителен в C #?
  • Как очистить текст всех текстовых полей в форме?
  • Нестандартные параметры шаблона
  • C ++ конвертировать вектор в вектор
  • C ++ 11 STL контейнеры и безопасность streamов
  • Перегрузка арифметического оператора для общего classа в C #
  • Давайте будем гением компьютера.