13

私はDataVisualization.Charting.Chart広範囲に使用しており、ほとんどの場合、機能しています。ただし、私はコード分析を頻繁に実行しており、すべての警告に対応しています。ただし、チャートを使用する* .Designer.csファイルには約30個のCA2000(すべての例外パスに沿って配置されていないオブジェクト)があります。Designerファイルは、ほとんどすべてのチャートコードを生成しており、ほとんどすべてのチャート要素がを実装していIDisposableます。プロジェクト設定で「生成されたコードからの結果を抑制する」をチェックしていますが、それでも実行されます。

チャートオブジェクトを手動で作成したり、そのクラスの残りのコードのコード分析を無効にしたりせずに、これを修正する方法はありますか?すべての.Designer.csファイルに対して無効にする方法はありますか?または、デザイナーコードに破棄を任せることで、これらの警告を正しく削除するソリューションはありますか?

4

4 に答える 4

2

かなりの数の開発者が運がなくてこれに遭遇したように見えるので、良い質問のために+1してください!

考えられる解決策は、のCA2000をオーバーライドし、デザイナーファイルで警告が検出された場合にルールを抑制するメソッドを作成することです。これが良いスタートです。

VisualStudio2010でカスタムコード分析ルールを作成する

それ以外の場合は、このスレッドの最後にあるコメントを参照してください。MSFTエンジニアは、Connect呼び出しをログに記録することに言及しています:http://blogs.msdn.com/b/codeanalysis/archive/2010/03/22/what-s-new-in- code-analysis-for-visual-studio-2010.aspx

于 2011-08-15T05:10:54.453 に答える
1

私はこれに遅れていることを知っていますが、ここに行きます。

これらの警告はすべて、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
    }
}
于 2014-08-27T14:10:29.320 に答える
1

*.Designer.csファイル[SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "..."]のメソッドにを追加するだけです。Dispose

やったばかりですが、デザイナーで何かが変更されたときにファイルを書き換えても、VS2012はそこに保持するのに十分賢いことがわかりました。

于 2015-04-08T23:28:10.857 に答える
0

プロジェクトの[コード分析]プロパティページで、[生成されたコードからの結果を抑制する]プロパティ値をtrueに切り替えようとしましたか?このオプションは、生成されたコードの問題を無視するための標準的なメカニズムです。

とはいえ、生成されたコードは実行されるコードであるため、違反を無視することは必ずしも良い考えではありません。CA2000の「ノイズ」を考えると、代わりにルールを無効にすることを検討することをお勧めします。

于 2011-08-09T14:08:54.053 に答える