Disabling/Fixing Code Analysis warnings from .Designer.cs files

落花浮王杯 提交于 2019-12-04 17:09:13

问题


I am using DataVisualization.Charting.Chart extensively, and for the most part it is working. However, I've been running Code Analysis frequently, and have all my own warnings taken care of. But, there are about 30 CA2000 (object not disposed along all exception paths) in the *.Designer.cs files that use the charting. The Designer files are generating pretty much all the charting code, and almost all the charting elements implement IDisposable. I have "Suppress results from generated code" checked in the project preferences, but it still does it.

Is there any way to fix this, without having to manually create the chart objects, and without disabling Code Analysis for the rest of the code in that class? Is there a way to disable it for all .Designer.cs files? Or, is there a solution to remove these warnings correctly by making the designer code take care of disposal?


回答1:


A fair few developers appear to have encountered this without a luck, so +1 for a good question!

A possible solution is to write a method that override's CA2000 and suppresses the rule if the warning is detected in a designer file, here's a good start:

Writing Custom Code Analysis Rules in Visual Studio 2010

Otherwise see the comments at the end of this thread, MSFT engineers mention to log a Connect call: http://blogs.msdn.com/b/codeanalysis/archive/2010/03/22/what-s-new-in-code-analysis-for-visual-studio-2010.aspx




回答2:


I know I'm late to this but here goes.

I'm guessing these warnings are all emitted for code within the InitializeComponent method? If so then have you considered modifying the template files located in Common7\IDE\ItemTemplates folder? You could add the GeneratedCode attribute on the method in those. Since the attribute will be set only on it, all your other code within the same class will still get checked by code analysis.

Here's an example for Form designer file:

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
    }
}



回答3:


Simply add a [SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "..."] to the Dispose method in your *.Designer.cs file.

I just did, and I've found out that VS 2012 is clever enough to keep it there even when rewriting the file when something was changed in the designer.




回答4:


Have you tried toggling the "Suppress results from generated code" property value to true in the Code Analysis property page for your project(s)? This option is the standard mechanism for ignoring problems in generated code.

That said, generated code is code that will be executed, so ignoring its violations is not necessarily a great idea. Given the "noisiness" of CA2000, you may wish to consider disabling the rule instead.



来源:https://stackoverflow.com/questions/6986918/disabling-fixing-code-analysis-warnings-from-designer-cs-files

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!