2011-02-25 13 views
28

एक पूरे फ़ोल्डर की प्रतिलिपि करने की कोशिश कर, लेकिन जब मैं इस कार्य करें:MSBuild कॉपी पूरे फ़ोल्डर

<Copy SourceFiles="$(TargetDir)\*.*" DestinationFolder="$(BuildOutput)\SomeDir" /> 

प्रति यह करने के लिए प्रयास करता है: प्रतिलिपि c: \ स्रोत \ * * ग:। \ गंतव्य \ SomeDir \ *। * और "अवैध पात्रों" के साथ विफल रहता है

+1

यहां एक समान प्रश्न पूछा गया है: http://stackoverflow.com/questions/119271/copy-all-files-and- फ़ोल्डर्स-using-msbuild – joshhendo

उत्तर

42

स्पष्ट रूप से SourceFiles के लिए अपना आइटम समूह निर्दिष्ट करें।

<ItemGroup> 
    <_CopyItems Include="$(TargetDir)\*.*" /> 
</ItemGroup> 
<Copy 
    SourceFiles="@(_CopyItems)" 
    DestinationFolder="$(BuildOutput)\SomeDir" 
    /> 

ध्यान दें कि _CopyItems, एक आइटम प्रकार है, इसलिए इसे प्रयोग संदर्भित है '@' '$' प्रतीक के बजाय।

+1

आइटम समूह में ' झूठी' बेहतर जोड़ें, अन्यथा आप समाधान एक्सप्लोरर में अपनी सभी बिन फ़ोल्डर सामग्री देखेंगे। ' <_CopyItems शामिल =" $ (TARGETDIR) *। * "> झूठी ' – Zelenov

12

एमएसडीएन दस्तावेज को देखते हुए, मेरा मानना ​​है कि SourceFiles पैरामीटर को ITaskItem [] मान की आवश्यकता है। MSDN MSBuild Copy Task

उपर्युक्त लिंक पर अंतिम उदाहरण एक निर्देशिका से दूसरी निर्देशिका में एक रिकर्सिव प्रतिलिपि करना है, फ़ोल्डर संरचना को बनाए रखना।

+1

इस उत्तर को और अधिक अपरिवर्तित करने की आवश्यकता है। – Nitij

+0

@ निटिज - मैंने अपना हिस्सा किया! यह एक उत्कृष्ट जवाब है, मैं उस लिंक पर घायल होने से पहले लगभग एक दर्जन अन्य लोगों के माध्यम से – jleach

12

प्रतिलिपि बनाई जा रही फ़ाइलें निम्नलिखित कोड का टुकड़ा जो एंटीवायरस प्रोग्राम और उप निर्देशिकाओं

<ItemGroup> 
     <SomeAppStuff Include="$(SolutionDir)\ProjectXXX\bins\**\*.*" /> 
    </ItemGroup> 
    <Copy 
     SourceFiles="@(SomeAppStaff)" 
     DestinationFolder="$(OutputPath)\%(RecursiveDir)" 
     SkipUnchangedFiles="true" 
     OverwriteReadOnlyFiles="true" 
     Retries="3" 
     RetryDelayMilliseconds="300"/> 

$(OutputPath)\%(RecursiveDir) निर्दिष्ट कॉपी, सबफ़ोल्डर का सम्मान करने के कार्य के लिए कहेगा तो यह लक्ष्य निर्देशिका के उप-फ़ोल्डरों पर स्रोत निर्देशिका के सबफ़ोल्डर स्थापित करेंगे संभालती साथ किया जा सकता ।

SkipUnchangedFiles पर्याप्त मेमोरी वाले कंप्यूटरों पर बिल्ड की गति में वृद्धि करेगा, क्योंकि पर्याप्त रैम होने पर विंडोज अक्सर उपयोग की जाने वाली फ़ाइलों के लिए आईओ को अनुकूलित करता है।

Retries और RetryDelayMilliseconds में शायद ही कभी एसएसडी ड्राइव के साथ मामलों ख) एंटीवायरस सॉफ्टवेयर में विफल रहता है जब बनाता है, संबंधित क) संकुचित NTFS फ़ाइल सिस्टम मुद्दों को संभालती है।

+0

क्या पथ \% (RecursiveDir) को 'DestinationFolder' की स्थापना के असर कर रहे हैं? क्या यह इच्छित स्थान पर निर्देशिका रखेगा, या जो भी रिकर्सन पथिंग से सबसे दूर है, –

+1

kayleeFrye_onDeck, यह गंतव्य निर्देशिका के सबफ़ोल्डर में स्रोत डीआईआर के उपफोल्डर्स रखेगा, अगर इसे निकालने के लिए, स्रोत निर्देशिका के सभी सबफ़ोल्डर की सामग्री को रखा जाएगा गंतव्य निर्देशिका के लिए। –

+1

धन्यवाद, @ drweb86! –

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