2015-09-04 7 views
5

तो VS2013 में हमारे पास का एक विकल्प "से उत्पन्न कोड (केवल प्रबंधित) दबाने परिणाम"सी # सोनार विश्लेषण से उत्पन्न को बाहर कोड

जब SONAR के माध्यम से विश्लेषण के प्रदर्शन हम एक ऐसी ही विकल्प है?

उपर्युक्त विकल्प अनचेक होने पर नीचे कोड रिपोर्ट उल्लंघन करता है लेकिन मुझे उपरोक्त विकल्प का उपयोग करने के लिए सोनार में कोई विकल्प नहीं दिख रहा है। मैंने Sonar.dotnet.excludeGeneratedCode = true विकल्प का प्रयास किया, लेकिन कोई फर्क नहीं पड़ता।

public IEnumerable<string> YieldTest() 
    { 
     foreach(var num in Enumerable.Range(100, 100)) 
      yield return string.Format("{0}", num); 
    } 
+0

विश्लेषक कैसे जानते हैं कि इसे उस विधि को विश्लेषण से बाहर कर देना चाहिए? क्या आपने इसे कुछ विशेष विशेषताओं के साथ चिह्नित किया है, क्या यह विशेष रूप से नामित फ़ाइल या विशेष प्रोजेक्ट प्रकार में है? –

+0

हाय दिनेश, मैंने [जेनरेटेडोड] विशेषता के साथ विधि को चिह्नित करने का प्रयास किया लेकिन इससे मदद नहीं मिली। – PankajH

+0

यदि आप उपरोक्त विकल्प के साथ विजुअल स्टूडियो में उपर्युक्त विधि का विश्लेषण करते हैं तो मुझे अनचाहे किया गया है, मुझे CA1305 के लिए उल्लंघन मिलता है और चेक के साथ मुझे कोई उल्लंघन नहीं मिलता है। – PankajH

उत्तर

2

MSBuild SonarQube धावक (कम से कम संस्करण 1.0 और 1.0.1 में) हमेशा बलों "उत्पन्न कोड से दबाने परिणाम (केवल प्रबंधित)" जब FxCop निर्माण के दौरान शुरू की है झंडा जांच की जानी। SonarQube.Integration.targets#L342

आप कमांड RunCodeAnalysis: चरण के दौरान शुरू की को देखकर अपने निर्माण लॉग में इस व्यवहार को सत्यापित कर सकते हैं, देखें:

RunCodeAnalysis: 
    Running Code Analysis... 
    C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\FxCop\FxCopCmd.exe 
    /outputCulture:1033 
    /out:"bin\Debug\ConsoleApplication1.exe.CodeAnalysisLog.xml" /file:"bin\Debug\ConsoleApplication1.exe" /ruleSet:"=C:\Users\dinesh\Desktop\tmp\ConsoleApplication1\.sonarqube\conf\\SonarQubeFxCop-cs.ruleset" 
    [... references ...] 
    /rulesetdirectory:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\\Rule Sets" 
    /rule:"-C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\FxCop\\Rules" 
    /searchgac /ignoreinvalidtargets /forceoutput /successfile **/ignoregeneratedcode** /saveMessagesToReport:Active /timeout:120 /reportMissingIndirectAssemblies 

आपको दिखाई देना चाहिए /ignoregeneratedcode FxCopCmd.exe पर प्रदान किया गया।

अब, केवल इस FxCop नियमों को इस ध्वज से दबाया जाएगा। उदाहरण के लिए स्टाइलकॉप और रीशेपर नियम इस ध्वज को समझ नहीं पाएंगे और अभी भी उस विधि पर रिपोर्ट करेंगे।

एफवाईआई, ऐसा लगता है कि 0xकथन की उपस्थिति के कारण FxCop इस विधि को शामिल करता है: सी # कंपाइलर इस कथन के लिए असेंबली में काफी जटिल आईएल कोड उत्पन्न करता है। FxCop असेंबली का विश्लेषण करता है (और स्रोत कोड नहीं), यही कारण है कि इसे उत्पन्न कोड के रूप में yield कथन का इलाज करना है।

तो, सोनारक्यूब में, आपको CA1305 के लिए कोई समस्या नहीं दिखाई देनी चाहिए, भले ही आपने "प्रोजेक्ट पर जेनरेट कोड (केवल प्रबंधित) से सप्रेस परिणाम" चेक किया हो या नहीं।

+0

हाय दिनेश, मैंने अभी लॉग की जांच की है और FxCop को केवल "/ forceoutput/searchgac" झंडे के साथ बुलाया जा रहा है, मुझे नहीं लगता/ignoregeneratedcode :(। क्या मुझे इस ध्वज को सक्रिय करने के लिए सोनार में कोई कॉन्फ़िगरेशन परिवर्तन करना है ? – PankajH

+0

जैसा कि आप एमएसबिल्ड सोनारक्यूब रनर स्रोतों में देख सकते हैं, यह इस ध्वज को 'सत्य' पर मजबूर करने का प्रयास करता है। मैं कल्पना कर सकता हूं कि कुछ अन्य अनुकूलित लक्ष्य बाद में 'झूठी' पर सेट कर रहे हैं। क्या आप कोशिश कर सकते हैं उस विधि को एक नई कंसोल एप्लिकेशन प्रोजेक्ट (डिफ़ॉल्ट .csproj फ़ाइल के साथ) में डालें? अगर इससे मदद नहीं मिलती है, तो क्या आप किसी अन्य मशीन से विश्लेषण चलाने की कोशिश कर सकते हैं? क्या आप एमएसबिल्ड संस्करण भी प्रदान कर सकते हैं जिसका उपयोग आप अपनी परियोजना के निर्माण में कर रहे हैं? हमने 12 से 14 का परीक्षण किया है। –

+0

मैं एमएसबिल्ड रनर की कोशिश कर रहा हूं, आपको अपडेट करूँगा। धन्यवाद – PankajH

0

मैं इस संपत्ति सेट के साथ चलाता हूं और इसमें जेनरेट कोड शामिल नहीं है।

  • /*.Tests/ ==> एक फ़ोल्डर .Tests (पुनरावर्ती) के साथ समाप्त होने में मिले सभी कोड को बाहर
  • :

    sonar.exclusions=**/*.Tests/**,**/*Language.Designer.cs,**/*.generated.cs 
    

    अगर हम विस्तार में लग रहे हैं, बहिष्कार इन भागों में शामिल है

  • **/* Language.Designer.cs ==> सभी संसाधन आईडी फ़ाइलों को बाहर
  • **/*। generated.cs ==> को बाहर सभी फाइलों .generated.cs में समाप्त होने वाले

यदि आप अन्य जेनरेट की गई फ़ाइलों (जैसे Winforms डिजाइनर फ़ाइलों) का उपयोग करते हैं तो आपको अपने मास्क पूछने की आवश्यकता होगी।

+0

मैं फिलिप, मैंने इस दृष्टिकोण की कोशिश की लेकिन यह काम नहीं लगता है। – PankajH

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