2010-02-26 9 views
9

हमारी प्रोजेक्ट फाइलों में हम स्टाइलकॉप का उपयोग कर रहे हैं और बिल्ड प्रक्रिया के दौरान इसे चला रहे हैं। हमने स्टाइलकॉप लक्ष्यों को शामिल करने के लिए हमारी प्रोजेक्ट फ़ाइलों को संशोधित किया है:स्टाइलकॉप एमएस जादू बनाएँ? StyleCop लक्ष्य को कौन कॉल कर रहा है?

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" /> 
<Import Project="..\..\Tools\Microsoft\StyleCop\v4.3\Microsoft.StyleCop.targets" /> 
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
    Other similar extension points exist, see Microsoft.Common.targets. 
<Target Name="BeforeBuild"> 
</Target> 
<Target Name="AfterBuild"> 
</Target> 
--> 

प्रश्न यह क्यों काम करता है? Microsoft.StyleCop.targets फ़ाइल में परिभाषित StyleCop लक्ष्य को कौन कॉल कर रहा है?

जहां तक ​​मैं कह सकता हूं, निर्माण शुरू करते समय एकमात्र लक्ष्य चल रहा है, "बिल्ड" लक्ष्य है। मुझे Microsoft.StyleCop.targets फ़ाइल के बाहर कहीं भी "StyleCop" लक्ष्य का कोई संदर्भ नहीं मिल रहा है। तो फिर, इसे क्यों कहा जा रहा है?

कारण मैं जानना चाहता हूं क्योंकि यह अच्छा होगा अगर हम अपने स्वयं के कस्टम कार्यों के लिए कुछ ऐसा कर सकें। तो बजाय हमारे 78 csproj फ़ाइलों के सभी संपादन की, हम बस हमारे अपने सामान्य लक्ष्य आयात कर सकता है जैसे:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" /> 
<Import Project="Common.targets" /> 

और फिर बस के बजाय उस फ़ाइल में StyleCop आयात करते हैं, हमारे सभी अन्य कार्यों पर किया जा करने की जरूरत है कि के साथ प्रति परियोजना आधार।

कृपया मुझे समझने में मदद करें।

उत्तर

9

यूरेका!

गुप्त सॉस StyleCop लक्ष्य फ़ाइल में निम्नलिखित लाइनों है:

<PropertyGroup> 
    <BuildDependsOn>$(BuildDependsOn);StyleCop</BuildDependsOn> 
    <RebuildDependsOn>StyleCopForceFullAnalysis;$(RebuildDependsOn)</RebuildDependsOn> 
</PropertyGroup> 

Microsoft.Common.targets में "बिल्ड" लक्ष्य इतना की तरह घोषित किया जाता है:

<Target Name="Build" 
     Condition=" '$(_InvalidConfigurationWarning)' != 'true' " 
     DependsOnTargets="$(BuildDependsOn)" 
     Outputs="$(TargetPath)" /> 

इसका मतलब है कि बिल्ड के दौरान "BuildDependsOn" संपत्ति में सूचीबद्ध कोई भी लक्ष्य कॉल किया जाएगा। क्या यह अच्छा नहीं है? :)

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