Отключение / исправление предупреждений анализа кода из файлов.Designer.cs

Я использую DataVisualization.Charting.Chart экстенсивно, и по большей части это работает. Тем не менее, я часто выполняю анализ кода, и обо всех моих предупреждениях позаботились. Но в файлах *.Designer.cs, использующих диаграммы, есть около 30 CA2000 (объект расположен не по всем путям исключений). Файлы Designer генерируют практически весь код диаграммы, и почти все элементы диаграммы реализуют IDisposable, Я установил флажок "Подавить результаты из сгенерированного кода" в настройках проекта, но он все равно делает это.

Есть ли способ исправить это, не создавая вручную объекты диаграммы и не отключая анализ кода для остальной части кода в этом классе? Есть ли способ отключить его для всех файлов.Designer.cs? Или есть решение для правильного удаления этих предупреждений, если код разработчика позаботится об их удалении?

4 ответа

Решение

Довольно немногие разработчики, кажется, столкнулись с этим без удачи, так что +1 за хороший вопрос!

Возможное решение - написать метод, который переопределяет CA2000 и подавляет правило, если предупреждение обнаруживается в файле конструктора. Вот хорошее начало:

Написание пользовательских правил анализа кода в Visual Studio 2010

В противном случае см. Комментарии в конце этой темы, упомянутые инженерами MSFT для регистрации звонка Connect: http://blogs.msdn.com/b/codeanalysis/archive/2010/03/22/what-s-new-in-code-analysis-for-visual-studio-2010.aspx

Просто добавьте [SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "..."] к Dispose метод в вашем файле *.Designer.cs.

Я только что сделал, и я обнаружил, что VS 2012 достаточно умен, чтобы держать его там даже при переписывании файла, когда что-то было изменено в конструкторе.

Я знаю, что опоздал на это, но здесь идет.

Я предполагаю, что все эти предупреждения генерируются для кода внутри InitializeComponent метод? Если да, то рассматривали ли вы вопрос об изменении файлов шаблонов, расположенных в папке Common7\IDE\ItemTemplates? Вы можете добавить GeneratedCode атрибут на метод в тех. Поскольку атрибут будет установлен только для него, весь ваш другой код в том же классе все равно будет проверяться анализом кода.

Вот пример для Form файл конструктора:

namespace $rootnamespace$
{
    partial class $safeitemrootname$
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("Windows Form Designer generated code", "1.0.0.0"), System.Diagnostics.DebuggerNonUserCode()]
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Text = "$safeitemrootname$";
        }

        #endregion
    }
}

Вы пытались установить значение свойства "Подавить результаты из сгенерированного кода" в значение "истина" на странице свойств анализа кода для вашего проекта? Эта опция является стандартным механизмом игнорирования проблем в сгенерированном коде.

Тем не менее, сгенерированный код - это код, который будет выполняться, поэтому игнорирование его нарушений не обязательно является хорошей идеей. Учитывая "шумность" CA2000, вы можете вместо этого рассмотреть возможность отключения правила.

Другие вопросы по тегам