2012-09-10 29 views
7

में कोड विश्लेषण विश्लेषण सेटिंग सेट करना मैं निर्माण प्रक्रिया के दौरान कोड विश्लेषण और समेकित सेटिंग्स को मजबूर करने के संबंध में टीएफएस की हमारी टेस्ट स्थापना में कुछ सेटिंग्स सेट/ओवरराइड करने का प्रयास कर रहा हूं (परियोजना फाइल को सेट करने की सेटिंग के बावजूद)TFSBuild.proj

वर्तमान में हम अपनी परीक्षा TFS स्थापना में उपयोग करें:

  • Visual Studio 2012 परम हमारे डेवलपर मशीनों पर और सर्वर का निर्माण
  • TFS 2012 के एक सर्वर पर इंस्टॉल किया गया है (आवेदन और डेटा स्तर)
  • में किसी अन्य सर्वर पर स्थापित TFS 2012 बिल्ड सेवा (नियंत्रक और एजेंट)

हम अपेक्षाकृत नमूना .NET 4.5 प्रोजेक्ट (कक्षा पुस्तकालय (डीएलएल), वेब अनुप्रयोग इत्यादि) संकलित कर सकते हैं। यह संबंधित कोड विश्लेषण सेटिंग्स (उम्मीद है) को ओवरराइड करने के साथ पूरी तरह से करना है।

परिदृश्य 1 - जब आप प्रोजेक्ट सेटिंग्स (राइट क्लिक -> समाधान एक्सप्लोरर में गुण) का चयन करते हैं तो हमारे डेवलपर मशीनों पर हमारे नमूना अनुप्रयोगों में, कोड विश्लेषण टैब पर जाएं यदि मैं "निर्माण पर कोड विश्लेषण सक्षम करें" चालू करता हूं और ड्रॉप डाउन से नियम सेट का चयन निष्पादित के रूप में किया जाता है, इसलिए यह कुछ चेतावनियां उत्पन्न करेगा। नोटपैड में खोले जाने पर यह तकनीकी * .csproj फ़ाइल में <RunCodeAnalysis>false</RunCodeAnalysis> जोड़ता है। यदि निर्माण नमूना परियोजना/समाधान संकलित करने के लिए निष्पादित किया गया है तो कोड विश्लेषण अपेक्षित के रूप में किया जाता है। मैं हर परियोजना पर ऐसा नहीं करना चाहता क्योंकि एक डेवलपर इसे बंद कर सकता है (हालांकि मैं चेक-इन नीतियों और/या निजी/गेटेड चेकइन के साथ-साथ इसे मजबूर करने के लिए भी देख रहा हूं)।

परिदृश्य 2 - मैं "बिल्ड पर कोड विश्लेषण सक्षम करें" चेकबॉक्स को अक्षम कर सकता हूं और हमारी TFSBuild.proj फ़ाइल में बल कोड विश्लेषण अक्षम कर सकता हूं (हम (डिफ़ॉल्ट रूप से) डिफ़ॉल्ट अपग्रेडेटप्लेट.एक्सएएमएल को हमारी प्रक्रिया परिभाषा के रूप में उपयोग करेंगे क्योंकि हम से उन्नयन करेंगे TFS 2008 हमारे LIVE TFS स्थापना) पर होने से:

<RunCodeAnalysis>Always</RunCodeAnalysis>

यह काम करता है और यह कैसे हम (सबक अभी भी अपना पक्ष रखना सीखा :-) के लिए बाध्य करेगा है) कोड विश्लेषण पर हमारे बनाता है।

समस्या तब उत्पन्न होती है जब अन्य समेकित कोड विश्लेषण सेटिंग्स सेट करते हैं। उदाहरण के लिए त्रुटियों के रूप में सीए चेतावनियों को लागू/उपयोग या इलाज करने के लिए कौन सा डिफ़ॉल्ट नियम सेट (ओं)। इन सेटिंग्स में से कुछ को या तो वीएस में सेट किया जा सकता है या उन सभी को नोटपैड में * .csproj संपादित करके सेट किया जा सकता है। यदि मैं * .csproj संपादित करता हूं तो इन मानों को निर्माण के रूप में उपयोग किया जाता है (साथ ही स्थानीय रूप से डेवलपर मशीन पर)। यह आदर्श नहीं है क्योंकि मैं इसे प्रत्येक परियोजना फ़ाइल को संपादित किए बिना TFSBuild.proj में केंद्रीय रूप से करना चाहता हूं। मेरा मानना ​​है कि मैं इस तरह के मेरी TFSbuild.proj फ़ाइल में के रूप में सेटिंग्स का उपयोग कर सकते हैं:

<PropertyGroup> 
    <RunCodeAnalysis>Always</RunCodeAnalysis> 
    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> 
    <CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors> 
</PropertyGroup> 

लेकिन वे काम करने के लिए प्रकट नहीं होते हैं या मैं उन्हें गलत जगह में डाल रहा हूँ? मैं उन्हें सही तरीके से कैसे ठीक/उपयोग कर सकता हूं?

FYI करें मैं द्वारा TFSBuild.proj में मेरे समाधान का निर्माण:

<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 

    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets" /> 
      <ItemGroup> 
      <SolutionToBuild Include="/some folder/some solution.sln" /> 
      <ConfigurationToBuild Include="Debug|Any CPU"> 
       <FlavorToBuild>Debug</FlavorToBuild> 
       <PlatformToBuild>Any CPU</PlatformToBuild> 
      </ConfigurationToBuild> 
      </ItemGroup> 
</Project> 

निर्माण सर्वर पर मैं सी में कोड विश्लेषण के लिए लक्ष्य फ़ाइल के संदर्भ में मिला: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ CodeAnalysis लेकिन मैं बिल्ड सर्वर पर डिफ़ॉल्ट व्यवहार को बदलना नहीं चाहता (हालांकि यह तब करता है जब मैं करता हूं)। CodeAnalysisTreatWarningsAsErrors के लिए उदाहरण के लिए शर्त को गलत के रूप में मूल्यांकन किया जाना चाहिए। मेरे मूल्यों की तरह यह TFSBuild.proj से नहीं पढ़ा जाता है लेकिन .csproj फ़ाइल से हैं।

कोई प्रश्न पूछने के लिए स्वतंत्र महसूस हो रहा है और अग्रिम

उत्तर

1

मैं एक ऐसी ही समस्या हो रही याद में धन्यवाद - लेकिन समय यह जांच करने के लिए नहीं होने, मैं FxCop बुला सीधे कार्यकारी कार्य उपयोग करके उसके चारों ओर काम किया। मैं आपको कुछ विशेषताओं के विनिर्देश को छोड़कर, हाइलाइट्स दूंगा, मुझे उम्मीद है कि नाम स्पष्ट हैं।

मैं उत्पादन DLLs, FilesToAnalyze के ItemGroup बनाया है, और एक तरह से करने के लिए इसी में FxCop करने के लिए इसे खिलाया:

<PropertyGroup> 
     <FxCopErrorLinePattern>: error</FxCopErrorLinePattern> 
     <FxCopCommand>"$(FxCopPath)" /gac /rule:"$(FxCopRules)" /ruleset:="$(FxCopRuleSet)" @(FilesToAnalyze->'/file:"%(identity)"', ' ') /out:$(FullFxCopLog) /console | Find "$(FxCopErrorLinePattern)" > "$(FxCopLogFile)"</FxCopCommand> 
</PropertyGroup>  

<Exec Command="$(FxCopCommand)" 
     ContinueOnError="true"> 
    <Output TaskParameter="ExitCode" PropertyName="FxCopExitCode"/> 
</Exec> 

<ReadLinesFromFile File="$(FxCopLogFile)"> 
    <Output TaskParameter="Lines" ItemName="AllErrorLines"/> 
</ReadLinesFromFile> 

मैं तो एक extensionpack कार्य का उपयोग कर उत्पादन में त्रुटियों की संख्या निर्धारित कर सकते हैं:

<BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
     BuildUri="$(BuildUri)" 
     Id="$(FxCopStep)" 
     Status="Failed" 
     Message="FxCop Failed: $(FxErrorCount) errors."/> 

<BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
       BuildUri="$(BuildUri)" 
       Status="Failed" 
       Message="%(AllErrorLines.Identity)"/> 

:

<MSBuild.ExtensionPack.Framework.MsBuildHelper TaskAction="GetItemCount" InputItems1="@(AllErrorLines)"> 
    <Output TaskParameter="ItemCount" PropertyName="FxErrorCount"/> 
</MSBuild.ExtensionPack.Framework.MsBuildHelper> 

और प्रत्येक त्रुटि के लिए एक असफल निर्माण चरण बनाना बिल्ड सर्वर पर कोड विश्लेषण करके इस तरह से, हमने प्रत्येक परियोजना को अलग से कॉन्फ़िगर करने से भी बचा है। हमने इसे अलग-अलग लक्ष्य फ़ाइल में अलग कर दिया है, इसलिए समाधान में कोड विश्लेषण जोड़ना उस फ़ाइल को आयात करने का मामला था, और संभवतः उचित गुणों को सेट करके व्यवहार को समायोजित करना था।

0

मेरे पास क्रूज़ कंट्रोल के साथ एक ही समस्या है जो CODE_ANALYSIS संकलन प्रतीक का उपयोग करके संकलित नहीं है, भले ही "बिल्ड पर कोड विश्लेषण सक्षम करें (CODE_ANALYSIS निरंतर परिभाषित करता है)" VS.Net में चेक किया गया था।

ऐसा लगता है कि क्या यह है की जाँच करें या नहीं, CODE_ANALYSIS वास्तव में नहीं स्पष्ट रूप से (भले ही वह टेक्स्ट बॉक्स में दिखाई देता है "सशर्त संकलन प्रतीकों") csproj में संकलन प्रतीकों की सूची, केवल <RunCodeAnalysis>true</RunCodeAnalysis> जोड़ा जाता है को जोड़ा गया है लग रहा है।

वीएस.Net के माध्यम से संकलित करते समय, CODE_ANALYSIS स्वचालित रूप से जोड़ा जाता है, लेकिन एमएसबिल्ड का उपयोग करते समय नहीं, जो क्रूज़ कंट्रोल का उपयोग करता है।

मैं अंततः "CODE_ANALYSIS; MySymbol" से "सशर्त संकलन प्रतीकों" को "MySymbol; CODE_ANALYSIS" में बदलकर VS.Net में बदल गया। ऐसा करने से CODE_ANALYSIS को csproj में भी दिखाना पड़ता है।