मैं MSBuild के बारे में ज्यादा पता नहीं है, लेकिन सी # के लिए दृश्य स्टूडियो के द्वारा प्रयोग किया MSBuild परियोजनाओं के मामले में एक सरल दिमाग दूसरा रास्ता नहीं है: का प्रयोग करें एक आफ्टरबिल्ड लक्ष्य के बजाय पोस्ट-बिल्ड बिल्ड इवेंट।
आप तीसरे टैब "बिल्ड इवेंट्स" पर विजुअल स्टूडियो प्रोजेक्ट गुण संवाद के माध्यम से एक पोस्ट-बिल्ड बिल्ड इवेंट सेट अप कर सकते हैं। कुछ स्थितियों के लिए इस संवाद पर कुछ आदेश दर्ज करना एक विचार हो सकता है, और उसके बाद यह निर्धारित करने के बाद सीधे .csproj फ़ाइल को संपादित करें कि यह कैसे काम करता है।
डायल द्वारा अनुरोध की गई कार्यक्षमता प्राप्त करने की कुंजी है - "इस पोस्ट-बिल्ड इवेंट को चलाएं: जब बिल्ड प्रोजेक्ट आउटपुट अपडेट करता है" का चयन करना याद रखें।
जैसा कि मैंने कहा, मुझे एमएसबिल्ड के बारे में बहुत कुछ पता नहीं है, और हो सकता है कि पोस्ट-बिल्ड बिल्ड इवेंट कुछ चीजों के लिए लागू न हो जो AfterBuild लक्ष्य कर सकता है। लेकिन मैंने इसे फाइलों की प्रतिलिपि बनाने और बीएटी स्क्रिप्ट चलाने के लिए उपयोग किया है, और इसके लिए यह ठीक काम करता है।
संपादित करें:
मैं कैसे मैं आमतौर पर मेरी सी # परियोजनाओं में होने वाली घटनाओं के बाद निर्माण का उपयोग के बारे में कुछ नोट्स जोड़ देंगे।
कार्यक्षमता के विभिन्न क्षेत्रों को अलग करने के लिए मैं आमतौर पर PostBuildEvent.bat नामक एक बीएटी स्क्रिप्ट तैयार करता हूं, और इसे .csproj फ़ाइल के समान फ़ोल्डर में रखता हूं।
cd $(ProjectDir)
PostBuildEvent.bat
तब मैं आदेशों मैं PostBuildEvent.bat फ़ाइल में मनचाहे स्थान: फिर मेरी पोस्ट-निर्माण घटना केवल दो पंक्तियों में शामिल है।यहाँ एक उदाहरण है:
copy "..\..\..\..\..\Shared Bin\Merlinia.CommonClasses.NamedPipesNative.dll" bin
copy "..\..\..\..\..\Shared Bin\Merlinia.CommonClasses.NamedPipesNative.pdb" bin
cd Packed-NonObfuscated
call PackForWindowsSystem32-NonObfuscated.bat
cd ..\
cd Packed-Obfuscated
call PackForWindowsSystem32-Obfuscated.bat
cd ..\
pause
याद रखें कि एक बैट स्क्रिप्ट आप स्पष्ट रूप से "कॉल" निर्दिष्ट से एक बैट स्क्रिप्ट कॉल करने के लिए। नोट "रोकें" का उपयोग भी करें - इससे बीएटी फ़ाइल पर डबल-क्लिक करके स्क्रिप्ट का परीक्षण करना संभव हो जाता है और फिर आप cmd विंडो में कोई त्रुटि संदेश देख सकते हैं। जब एमएसबिल्ड के माध्यम से स्क्रिप्ट चलाया जाता है तो "रोकें" को अनदेखा किया जाता है।
ऐसा प्रतीत होता है कि "RebuildDependsOn" लक्ष्य अपडेट करने से केवल अतिरिक्त चरणों को ट्रिगर करने का कारण बन जाएगा यदि आप स्पष्ट रूप से "पुनर्निर्माण" लक्ष्य का आह्वान करते हैं। यदि आप "बिल्ड" का आह्वान करते हैं तो वे ट्रिगर नहीं करेंगे। –
मैंने अभी इस मामले को कवर करने के लिए इसे संपादित किया है। मैं जो चाहता था उसके बारे में उलझन में था। क्या यह काम करता है? –
इनपुट और आउटपुट का उपयोग करने के लिए मेरे लिए काम किया। मेरे मामले में मैं परियोजना की मुख्य आउटपुट फ़ाइल का उपयोग करने में सक्षम था - यानी $ (लक्ष्यपैथ) - अन्य सभी निर्भरताओं के लिए प्रॉक्सी के रूप में। – yoyo