मैंने एक समान लेकिन अलग-अलग प्रश्न का उत्तर दिया कि आप VS2010 वेब परिनियोजन पैकेज का उपयोग करके अतिरिक्त फ़ाइलों को कैसे शामिल करते हैं? ।
आपके परिदृश्य में आप पोस्ट बिल्ड ईवेंट का उपयोग कर रहे हैं, मैं आपको पोस्ट बिल्ड ईवेंट को छोड़ने और पोस्ट बिल्ड इवेंट के बजाय अपने स्वयं के MSBuild लक्ष्यों का उपयोग करके अपने कार्यों को लागू करने की सलाह दूंगा। नीचे आपको दूसरे उत्तर का पाठ मिलेगा।
से: आप VS2010 वेब परिनियोजन पैकेज का उपयोग करके अतिरिक्त फ़ाइलों को कैसे शामिल करते हैं?
बड़ा सवाल है। मैंने अभी वेब परिनियोजन उपकरण (MSDeploy) में इसके बारे में एक बहुत विस्तृत ब्लॉग प्रविष्टि पोस्ट की है : अतिरिक्त फ़ाइलों सहित पैकेज या विशिष्ट फ़ाइलों को छोड़कर ।
यहाँ सिनॉप्सिस है। फ़ाइलों को शामिल करने के बाद, मैं दिखाता हूं कि फ़ाइलों को कैसे बाहर रखा जाए।
जिनमें एक्सट्रा फाइल्स शामिल हैं
पैकेज में अतिरिक्त फ़ाइलों को शामिल करना थोड़ा कठिन है लेकिन फिर भी कोई बड़ा नहीं है अगर आप MSBuild के साथ सहज हैं, और यदि आप नहीं हैं तो इसे पढ़ें। ऐसा करने के लिए हमें उस प्रक्रिया के हिस्से में हुक लगाने की आवश्यकता है जो पैकेजिंग के लिए फाइलें एकत्र करता है। हमें जिस लक्ष्य का विस्तार करने की आवश्यकता है उसे CopyAllFilesToSingleFolder कहा जाता है। इस लक्ष्य के पास एक निर्भरता गुण है, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, जिसे हम टैप कर सकते हैं और अपने स्वयं के लक्ष्य को इंजेक्ट कर सकते हैं। इसलिए हम CustomCollectFiles नाम का एक लक्ष्य बनाएंगे और इस प्रक्रिया में इंजेक्ट करेंगे। हम इसे निम्नलिखित के साथ प्राप्त करते हैं (आयात विवरण के बाद याद रखें)।
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
यह हमारे लक्ष्य को प्रक्रिया में जोड़ देगा, अब हमें लक्ष्य को स्वयं परिभाषित करने की आवश्यकता है। मान लेते हैं कि आपके पास एक्स्ट्रा फाइल्स नाम का एक फोल्डर है जो आपके वेब प्रोजेक्ट के ऊपर 1 लेवल पर बैठता है। आप उन सभी फ़ाइलों को शामिल करना चाहते हैं। यहाँ CustomCollectFiles लक्ष्य है और हम उसके बाद चर्चा करते हैं।
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
यहाँ मैंने जो कुछ भी किया था वह था _CustomFiles आइटम बनाना और इसमें शामिल विशेषता ने उस फ़ोल्डर में सभी फ़ाइलों को लेने और इसके नीचे किसी भी फ़ोल्डर को लेने के लिए कहा। तब मैं FilesForPackagingFromProject आइटम को पॉप्युलेट करने के लिए इस आइटम का उपयोग करता हूं। यह वह आइटम है जिसे MSDeploy वास्तव में अतिरिक्त फ़ाइलों को जोड़ने के लिए उपयोग करता है। यह भी ध्यान दें कि मैंने मेटाडाटा डेस्टिनेशनरेलिवेटिव वैल्यू घोषित किया है। यह सापेक्ष पथ निर्धारित करेगा कि इसे पैकेज में रखा जाएगा। मैंने यहाँ स्टेटमेंट फाइल्स% (RecursiveDir)% (फाइलनाम)% (एक्सटेंशन) का उपयोग किया। जो कुछ भी कह रहा है उसे पैकेज में उसी सापेक्ष स्थान पर रखना है क्योंकि यह अतिरिक्त फ़ाइलों के फ़ोल्डर में है।
फाइलों को छोड़कर
यदि आप वीएस 2010 के साथ बनाई गई एक वेब एप्लिकेशन की प्रोजेक्ट फाइल खोलते हैं, तो उसके नीचे आपको एक लाइन मिलेगी।
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
BTW आप VS के अंदर प्रोजेक्ट फ़ाइल खोल सकते हैं। प्रोजेक्ट पिक अनलोड प्रोजेक्ट पर राइट क्लिक करें। फिर अनलोड्ड प्रोजेक्ट पर राइट क्लिक करें और एडिट प्रोजेक्ट चुनें।
इस कथन में वे सभी लक्ष्य और कार्य शामिल होंगे जिनकी हमें आवश्यकता है। हमारे अधिकांश अनुकूलन उस आयात के बाद होने चाहिए, यदि आपको यकीन नहीं है कि बाद में डाल दिया जाए! इसलिए यदि आपके पास फ़ाइल को बाहर करने के लिए कोई आइटम नाम है, तो ExcludeFromPackageFiles, जो ऐसा करने के लिए उपयोग किया जा सकता है। उदाहरण के लिए मान लें कि आपके पास Sample.Debug.js नाम की फ़ाइल है जो आपके वेब एप्लिकेशन में शामिल है लेकिन आप चाहते हैं कि फ़ाइल को बनाए गए पैकेजों से बाहर रखा जाए। आप उस आयात विवरण के बाद स्निपेट को नीचे रख सकते हैं।
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
इस आइटम को पॉप्युलेट करने से फ़ाइलों को स्वचालित रूप से बाहर रखा जाएगा। FromTarget मेटाडेटा के उपयोग पर ध्यान दें। मैं इसमें शामिल नहीं होऊंगा, लेकिन आपको हमेशा यह बताना चाहिए।