2011-08-08 22 views
12

मैं DataVisualization.Charting.Chart का उपयोग कर रहा हूं, और अधिकांश भाग के लिए यह काम कर रहा है। हालांकि, मैं अक्सर कोड विश्लेषण चला रहा हूं, और मेरी सभी चेतावनियों का ख्याल रखा गया है। लेकिन, चार्टिंग का उपयोग करने वाले * .esignign.cs फ़ाइलों में लगभग 30 CA2000 (सभी अपवाद पथों के साथ ऑब्जेक्ट का निपटारा नहीं किया गया है) हैं। डिजाइनर फाइलें सभी चार्टिंग कोड को बहुत अधिक उत्पन्न कर रही हैं, और लगभग सभी चार्टिंग तत्व IDisposable लागू करते हैं। मेरे पास प्रोजेक्ट वरीयताओं में चेक किए गए "जेनरेट कोड से परिणाम दबाएं" है, लेकिन यह अभी भी करता है।डीसिनर सीएस फाइलों से कोड विश्लेषण चेतावनियों को अक्षम/फिक्सिंग

क्या इसे ठीक करने के लिए कोई तरीका है, मैन्युअल रूप से चार्ट ऑब्जेक्ट्स बनाने के बिना, और उस कक्षा में शेष कोड के लिए कोड विश्लेषण अक्षम किए बिना? क्या सभी के लिए इसे अक्षम करने का कोई तरीका है। डिज़ाइनर सीएस फाइलें? या, क्या डिज़ाइनर कोड निपटान का ख्याल रखकर इन चेतावनियों को सही ढंग से निकालने का कोई समाधान है?

+0

इस धागे को देखें http://stackoverflow.com/questions/4164928/how-to-suppress-code-analysis-on-generated-code, यह कुछ अच्छा विचार है, भले ही उनका उद्देश्य FxCop व्यक्ति "XMLForDummies" कोड विश्लेषण के साथ ऐसा करने की कोशिश करता है, यह एक लायक/प्रयास के लायक है। –

+0

चूंकि यह पहले से ही Designer.cs फ़ाइल में है, इसलिए इसमें पहले से ही उन छोटी चीजें हैं। जाहिर है वीएस कोड विश्लेषण भी डिजाइनर फ़ाइलों की जांच करता है, जो मेरे लिए थोड़ा बेतुका है; ऐसा लगता है कि वे उन समस्याओं को ठीक करने वाले हैं, मुझे नहीं! इस लिखाई के लिए धन्यवाद; लगता है जैसे मैं कुछ खराब कोड विश्लेषण परिणामों को प्राप्त नहीं कर रहा हूं। – drharris

+0

आपको वैश्विक दमन, फ़ाइल, नहीं में वैश्विक रूप से इसे दबाने में सक्षम होना चाहिए? – BrainSlugs83

उत्तर

2

एक उचित कुछ डेवलपर्स को भाग्य के बिना इसका सामना करना पड़ता है, इसलिए एक अच्छे प्रश्न के लिए +1!

Writing Custom Code Analysis Rules in Visual Studio 2010

अन्यथा अंत में टिप्पणी देखें:

सम्भावित समाधान विधि ओवरराइड के CA2000 और शासन को दबा यदि चेतावनी एक डिजाइनर फ़ाइल में पता चला है लिखना है, यहाँ एक अच्छी शुरुआत है इस धागे के, एमएसएफटी इंजीनियरों ने कनेक्ट कॉल लॉग करने का जिक्र किया है: http://blogs.msdn.com/b/codeanalysis/archive/2010/03/22/what-s-new-in-code-analysis-for-visual-studio-2010.aspx

+0

वाह, मैं वास्तव में नहीं जानना चाहता कि आत्मनिरीक्षण का उपयोग कैसे करें, लेकिन यह अधिक से अधिक दिख रहा है जैसे यह एकमात्र समाधान हो सकता है। अगर मैं अगले दिन या तो किसी और को पाइप नहीं करता तो मैं इसे स्वीकार कर दूंगा। अभी भी विकल्पों में कहीं गहराई से उस छिपे हुए चेकबॉक्स की उम्मीद है। :) – drharris

+1

ठीक है, तो ऐसा लगता है कि यह बहुत बुरा नहीं होगा। मुझे बॉक्स से बाहर काम करने वाले कुछ को ठीक करने के लिए कोड का एक गुच्छा लगाने से नफरत है, लेकिन यह 30-40 चेतावनियों के साथ प्रत्येक निर्माण को कूड़ेदान से बेहतर है। अभी भी पूरी तरह से यह नहीं पता है कि मुझे क्या करना है, इसे पूरा करने के लिए, लेकिन इन लिंकों को मुझे बाकी के साथ प्रयोग करने के लिए काफी दूर ले जाना चाहिए। एक बार फिर धन्यवाद! – drharris

0

क्या आपने अपने प्रोजेक्ट के लिए कोड विश्लेषण संपत्ति पृष्ठ में "जेनरेट कोड से सपोर्ट परिणाम" संपत्ति मान को सही करने की कोशिश की है? जेनरेट कोड में समस्याओं को अनदेखा करने के लिए यह विकल्प मानक तंत्र है।

उस ने कहा, जेनरेट कोड कोड है जिसे निष्पादित किया जाएगा, इसलिए इसके उल्लंघनों को अनदेखा करना एक अच्छा विचार नहीं है। सीए 2000 की "शोर" को देखते हुए, आप इसके बजाय नियम को अक्षम करने पर विचार करना चाहेंगे।

+2

मैंने अपने पहले पैराग्राफ में रखा है कि मैंने बिना किसी सुधार के जांच की है। स्पष्ट रूप से काम करने के लिए, 'जेनरेटेड कोड एट्रिब्यूट' सेट करने की आवश्यकता है। समस्या यह है कि चूंकि Designer.cs फ़ाइलें आंशिक कक्षाएं हैं, इसलिए मैं शर्त लगा रहा हूं कि विशेषता केवल डिजाइनर कोड के लिए काम नहीं करेगी (यानी यह मेरे इन-क्लास कोड पर लागू होगी, जो अस्वीकार्य है)। इसे बंद करना वास्तव में एक विकल्प नहीं है ... संभावित फाइल हैंडल लॉकिंग और इसी तरह के मुद्दों के कारण सीए 2000 ने कुछ बार मेरी पिछली बार बचाई है; मेरा कोड भी I/O ऐसा करने के लिए गहन है। एमएस चार्ट से शोर को कम करने के लिए एक तरीका की उम्मीद है। – drharris

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

लेकिन ... हमें इस टीम को हमारे टीम के पर्यावरण पर हर किसी को बदलना होगा, है ना? - अन्यथा '[जेनरेटेडोड]' विशेषता दिखाई देगी और यादृच्छिक रूप से गायब हो जाएगी ... जो वास्तव में दर्दनाक लगता है ... - भी, हम इसे पूरी कक्षा में क्यों नहीं करेंगे? – BrainSlugs83

+0

यह गायब नहीं होगा। टेम्पलेट्स का उपयोग केवल दस्तावेज़ निर्माण के लिए किया जाता है। एक बार फ़ाइल बनाई जाने के बाद, इसे किसी अन्य कोड फ़ाइल की तरह साझा किया जा सकता है। यदि एकाधिक सहकर्मियों को फाइलें बनाना चाहिए तो हां, उनमें से प्रत्येक को टेम्पलेट की आवश्यकता होगी। लेकिन यह एक बार की बात है, यह एक बड़ा सौदा नहीं होना चाहिए। – Crono

+0

इसके अलावा, कक्षा पर जेनरेटेड विशेषता डालने से इसके भीतर के प्रत्येक सदस्यों के लिए चेतावनियां अक्षम हो जाएंगी। मुझे संदेह है कि ओपी इसे चाहेगा। – Crono

1

बस अपनी * .Designer.cs फ़ाइल में Dispose पद्धति के लिए एक [SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "..."] जोड़ें।

मैंने अभी किया है, और मुझे पता चला है कि वीएस 2012 डिजाइनर में कुछ बदलते समय फ़ाइल को फिर से लिखते समय भी इसे रखने के लिए पर्याप्त चालाक है।

+0

मुझे अब भी सत्यापित करने के लिए मूल कोडबेस तक पहुंच नहीं है ऐसा लगता है, लेकिन ऐसा लगता है कि यह अब काम कर सकता है। मुझे लगता है कि मुझे वीएस -2010 में इस कोशिश की याद आ रही है, और यदि आप कुछ बदलते हैं तो यह दमन को बरकरार नहीं रखेगा, इसलिए हो सकता है कि यह एक बग तय हो। उम्मीद है कि इसे देखने वाले अन्य लोगों के लिए उपयोगी भविष्य में समस्या! – drharris

+0

मुझे निश्चित रूप से वीएस के पुराने संस्करणों में इसके साथ संघर्ष करना याद है, इसलिए मैंने लगभग कोशिश भी नहीं की। लेकिन ऐसा लगता है कि यह काम करता है। मुझे उम्मीद है कि यह सभी मामलों में काम करता है। अन्यथा, हम इसके बारे में यहां सुना होगा। – Dejan

संबंधित मुद्दे