2011-10-04 10 views
8

मेरे समाधान निर्माण के हिस्से के रूप में, मैं सभी "सामग्री" फ़ाइलों (एएसपी? एक्स आदि) को किसी अन्य फ़ोल्डर में कॉपी करना चाहता हूं। चूंकि ये परियोजना में इतनी स्पष्ट रूप से टैग किए गए हैं, मैंने सोचा कि xcopy के साथ अपना स्वयं का पोस्ट-बिल्ड चरण लिखने के बजाय इन्हें कॉपी करने का एक आसान तरीका होना चाहिए। दुर्भाग्य से मैं इसे समझने में सक्षम नहीं हूं - यह एमएसबिल्ड चीज मेरे दिमाग से असंगत है। मुझे बस जैसे चरण चाहिए लेकिन उपयोग करने के लिए वाक्यविन्यास को समझ नहीं सकते हैं।मैं MSBuild को फ़ोल्डर में सामग्री के रूप में चिह्नित सभी फ़ाइलों की प्रतिलिपि बनाने, फ़ोल्डर संरचना को संरक्षित करने के लिए कैसे प्राप्त कर सकता हूं?

चमगादड़ फ़ाइल वाक्य रचना सुझाव इस प्रश्न का उत्तर नहीं होगा - केवल शुद्ध MSBuild समाधान लागू

धन्यवाद, प्रति

उत्तर

10

आप आसानी से पालन करके ऐसा कर सकते हैं:

<PropertyGroup> 
    <DestFolder>..\Copy\</DestFolder> 
</PropertyGroup> 

<Target Name="CopyContentFiles"> 
    <Copy SourceFiles="@(Content)" 
     DestinationFiles="@(Content->'$(DestFolder)%(RelativeDir)%(Filename)%(Extension)')"/> 
</Target> 

आप के रूप में इस पर अमल करना चाहते हैं एक के बाद निर्माण चरणों तो तुम सिर्फ AfterTargets = उदाहरण के लिए "बनाएँ" जोड़ सकते हैं:

<PropertyGroup> 
    <DestFolder>..\Copy\</DestFolder> 
</PropertyGroup> 

<Target Name="CopyContentFiles" AfterTargets="Build"> 
    <Copy SourceFiles="@(Content)" 
     DestinationFiles="@(Content->'$(DestFolder)%(RelativeDir)%(Filename)%(Extension)')"/> 
</Target> 
+0

अगर हम मूल 'csproj' फ़ाइल को संपादित किए बिना ऐसा कैसे कर सकते हैं? http://stackoverflow.com/questions/30577036/without-editing-the-csproj-file-get-msbuild-to-copy-all-files-marked-as-content –

+0

@ShunLuttin http://sedodream.com देखें /2012/07/28/MSBuildHowToExecuteATargetAfterCoreCompilePart2.aspx –

+0

यह सुनिश्चित नहीं है कि एमएसबिल्ड को वर्षों में कम वर्बोज़ मिल गया है, क्योंकि इसका उत्तर दिया गया था, लेकिन DestinationFiles = "$ (DestFolder) \% (RelativeDir)% (फ़ाइल नाम)% (एक्सटेंशन)" काम किया मेरे लिए (यानी सामग्री-> बिट छोड़ें) – piers7

1

मैं वेब का उपयोग सभी सामग्री फ़ाइलों को पैकेज सुविधा को तैनात है और फिर मैं यह कर सकते हैं किसी साइट के साथ सिंक करने के लिए वेब परिनियोजन का उपयोग करें या यदि वेब परिनियोजन एक विकल्प नहीं है तो xcopy या बल्कि RoboCopy का उपयोग करें।

रोबो कॉपी कार्य MSBuild Community Tasks में शामिल किया गया है।

<PropertyGroup> 
    <Configuration>Release</Configuration> 
    <PackageDir>$(MSBuildProjectDirectory)\obj\$(Configuration)\Package\PackageTmp</PackageDir> 
    <ServerPath>\\server\path</ServerPath> 
    <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\...</MSBuildCommunityTasksPath> 
</PropertyGroup>  

<ItemGroup> 
    <Project Include="WebApplication.csproj"/> 
</ItemGroup> 

<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" /> 

<Target Name="Deploy"> 
    <MSBuild Projects="@(Project)" Targets="Build;Package" Properties="Configuration=$(Configuration)"/> 
    <RoboCopy 
     SourceFolder="@(PackageDir)" 
     DestinationFolder="$(ServerPath)" 
     Subdirectories="true" 
     Mirror="true" 
     /> 
</Target> 
0

सईद का उत्तर मेरे लिए काम नहीं करता क्योंकि यह मूल मूल निर्देशिका को भी बनाए रखता है। मैंने इसके बजाय निम्नलिखित परिवर्तित संस्करण का उपयोग किया और यह खूबसूरती से काम किया और थोड़ा और सुरुचिपूर्ण है!

<PropertyGroup> 
    <DestFolder>..\Copy\</DestFolder> 
</PropertyGroup> 

<Target Name="CopyContentFiles"> 
    <Copy SourceFiles="@(Content)" 
     DestinationFiles="$(DestFolder)\%(RecursiveDir)"/> 
</Target> 
+0

सही काम नहीं कर सकता है मुझे नहीं लगता कि RecursiveDir प्रोजेक्ट में * सामग्री * फ़ाइलों के लिए काम करता है, केवल फ़ाइल सेट के लिए जो आपने फ़ाइल सिस्टम के खिलाफ ग्लोबिंग से लोड किया है। – piers7

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

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