2013-03-16 12 views
8

पर विफल रहता है मेरे पास एक बिल्ड लक्ष्य है जिसे मैं MSBuild में निष्पादित करने का प्रयास कर रहा हूं। लक्ष्य में कुछ इनपुट और आउटपुट हैं जो मैंने मध्यवर्ती निर्माण के मामले में समय को तेज करने के लिए रखे हैं। इनपुट फाइलें हमेशा मौजूद हैं (हेडर फाइलें), दूसरी ओर, आउटपुट हमेशा मौजूद नहीं होते हैं (एक्सएमएल फाइलें)।एमएसबिल्ड: लक्ष्य इनपुट और आउटपुट पहले निष्पादन

एक इंटरमीडिएट बिल्ड जो संभावित रूप से कार्य को छोड़ देता है वह काफी वांछनीय है क्योंकि यह प्रदर्शन के मामले में काफी महंगा है।

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

छोड़ा जा रहा है लक्ष्य [टार्गेटनाम] क्योंकि यह कोई है:

यह मामला है जब उत्पादन निर्देशिका और फ़ाइलें मौजूद नहीं है (पहली बार इस कार्य चलाया जाता है) कि MSBuild निम्न संदेश के साथ विफल रहता है आउटपुट।

विस्तृत वर्बसिटी जोड़ने से मुझे कारण बताता है क्योंकि @ (आउटपुटएक्सएमएल) आइटम खाली हैं। ठीक है, तो अब क्या? ऐसा नहीं लगता है कि एमएसबिल्ड में इंटरमीडिएट बिल्ड की पूरी अवधारणा तब बहुत मजबूत है।

मेरा सवाल है, मैं मध्यवर्ती निर्माण का लाभ कैसे प्राप्त कर सकता हूं और अभी भी कोई आउटपुट होने पर यह लक्ष्य निष्पादित हो सकता है? (मैं आशा करती हूं मैं अपने खुद के कार्य विस्तार लेखन का सहारा की जरूरत नहीं है)

यहाँ अपने निर्माण स्क्रिप्ट के संबंधित भाग है:

<ItemGroup> 
    <Headers Include="..\**\*.h" /> 
    <OutputXML Include="$(OutputDir)\*.xml" /> 
</ItemGroup> 

<Target Name="Doxygen" 
     Inputs="@(Headers)" 
     Outputs="@(OutputXML)" > 
    <Exec ... /> 
</Target> 

नोट: मैं गूगल पर सभी किया गया है , msdn, और यह वेबसाइट एक उत्तर खोजने का प्रयास कर रही है और अब तक असफल रही है। हालांकि मुझे सामान्य रूप से एमएसबिल्ड के बारे में बहुत उपयोगी जानकारी मिली है।

+0

हाय क्रिस, इस पोस्ट से संबंधित नहीं है। एमएसबिल्ड पर कुछ मदद पाने के लिए मैं आपसे संपर्क कर रहा हूं। मैं एमएसबिल्ड के लिए नया हूं और फ्लाई पर समाधान फाइलें उत्पन्न करने के लिए देख रहा हूं। मैंने नीचे दिए गए एसओ पोस्ट में देखा है कि आपने उल्लेख किया है कि आपके पास कुछ इसी तरह का समाधान है। क्या आप इसे मेरे साथ साझा करने में सक्षम होंगे। धन्यवाद। http://stackoverflow.com/questions/13300294/can-i-use-msbuild-scripts-to-replace-sln-files – user559788

उत्तर

6

डमी आउटपुट का उपयोग करने के बारे में क्या?

<ItemGroup> 
<Headers Include="..\**\*.h" /> 
<OutputXML Include="$(OutputDir)\*.xml" /> 
</ItemGroup> 

<ItemGroup Condition="'@(OutputXML)' == ''"> 
<OutputXML Include="$(OutputDir)\dummy.xml" /> 
</ItemGroup> 

<Target Name="Doxygen" 
     Inputs="@(Headers)" 
     Outputs="@(OutputXML)" > 
<Exec ... /> 
</Target> 

आउटपुटडियर को dummy.xml पर सेट करते समय यह खाली नहीं है, भले ही फ़ाइल मौजूद न हो। वाइल्डकार्ड इंगित करता है कि आप किसी भी .xml की खोज कर रहे हैं और उसे कोई नहीं मिला है, लेकिन एक विशिष्ट नामकरण एक खोज नहीं करेगा और इसके लिए यह परवाह नहीं है कि यह मौजूद है या नहीं।

+0

पूरी तरह से काम किया। धन्यवाद, मुझे पता नहीं था कि आप एक ही आइटम को दोबारा परिभाषित कर सकते हैं। लेकिन यह बहुत अच्छा काम करता है! –

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