2012-12-08 44 views
18

में प्रकाशित ईवेंट के बाद मैं ईवेंट प्रकाशित करने के बाद सरल कार्य करने का प्रयास कर रहा हूं। जब मैं "प्रकाशित" कहता हूं, मेरा मतलब है विजुअल स्टूडियो में प्रकाशित, प्रोजेक्ट पर राइट क्लिक करें और "प्रकाशित करें ..." दबाएं। मैंने प्रोजेक्ट फ़ाइल में (आयातित) लक्ष्य फ़ाइल शामिल की है जो ठीक काम करती है क्योंकि मैंने इसे बिल्ड इवेंट पर पहले से ही परीक्षण किया है। मुझे http://msdn.microsoft.com/en-us/library/ms366724.aspx पर मिला है कि AfterPublish ईवेंट है जो मुझे चाहिए जो करना चाहिए, लेकिन ऐसा नहीं है। मुझे यकीन नहीं है कि यह एक ही घटना है जिसे विजुअल स्टूडियो में प्रकाशित करने पर ट्रिगर करना चाहिए, कृपया इसे स्पष्ट करें। मेरा प्रश्न है कि विजुअल स्टूडियो में प्रकाशित करने पर लक्ष्य फ़ाइल से किसी भी प्रकार का कार्य कैसे ट्रिगर करना है?विजुअल स्टूडियो

मैं लक्ष्य फ़ाइल में इस की कोशिश की है:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="AfterPublish"> 
     <Message Label="Test"></Message>   
     <Warning Label="Test"></Warning> 
    </Target> 
</Project> 

मैं दृश्य स्टूडियो का उपयोग कर रहा 2010

संपादित करें:

मैं वास्तव में प्रकाशित पर कुछ कार्रवाई अमल करने के लिए किसी भी तरह से देख रहा हूँ दृश्य स्टूडियो। मैं बिल्ड इवेंट्स जोड़ने की भी सोच रहा था, लेकिन मुझे नहीं पता कि यह कैसे निर्धारित किया जाए कि यह प्रगति पर प्रकाशित है या नहीं।

संपादित करें: @Alexey शचेरबक अपने तेजी से उत्तर के लिए धन्यवाद। मैं अपने MSBuild उत्पादन में इस मिल रहा है:

12/10/2012 12:29:40 AM:  Done executing task "CallTarget". 
12/10/2012 12:29:40 AM:  Done building target "PipelinePreDeployCopyAllFilesToOneFolder" in project "PublishTestApp.csproj". 
12/10/2012 12:29:40 AM:Done building project "PublishTestApp.csproj". 
Deleting existing files... 
Publishing folder /... 
Publishing folder Account... 
Publishing folder bin... 
Publishing folder Scripts... 
Publishing folder Styles... 
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ========== 
========== Publish: 1 succeeded, 0 failed, 0 skipped ========== 

तो मेरी कार्य सही PipelinePreDeployCopyAllFilesToOneFolder के बाद लेकिन फ़ाइलों की वास्तविक मुकाबला पहले कार्यान्वित होगा और मैं विचार नहीं करते प्रकाशित उस बिंदु पर अभी तक किया जा रहा है। बेशक, मैंने वास्तव में इसका परीक्षण किया था, इसलिए एमएसबिल्ड कार्य में मैं पाठ फ़ाइल से सरल पढ़ा रहा था, जिसे लगता है कि प्रकाशित फ़ोल्डर में कॉपी किया जाना है, और यह असफल रहा।

+0

अपने संपादित के जवाब में एक और हिस्सा जोड़ा –

उत्तर

14

प्रकाशित करें संदर्भ मेनू लक्ष्य "प्रकाशित करें" (यदि हम, वेबसाइट प्रकाशन के बारे में बात कर रहे हैं ClickOnce पैकेज प्रकाशित नहीं) नहीं चल रहा है।

आप VS2010 उपयोग कर रहे हैं - संदर्भ मेनू "PipelinePreDeployCopyAllFilesToOneFolder" लक्ष्य चलेंगे, और VS2012 में (ध्यान में रखना अगर आप स्विच करने के लिए जा रहे हैं) यह "MSDeployPublish" लक्ष्य चलेंगे।

मुझे लगता है कि आपको this question and answer पढ़ना चाहिए। जेज़ और मैंने प्रकाशित लक्ष्य के बाद \ पहले कैसे हुक करने के बारे में बहुत व्यापक उत्तर प्रदान किया।

संक्षेप में - MSBuild संस्करण> = 4.0 के लिए आप @ Edit1 इस दृष्टिकोण

<Target Name="Mytarget" AfterTargets="PipelinePreDeployCopyAllFilesToOneFolder" > 
    <Message Label="Test"></Message>   
    <Warning Label="Test"></Warning> 
</Target> 

इस्तेमाल कर सकते हैं: CopyAllFilesToSingleFolderForPackage बजाय PipelinePreDeployCopyAllFilesToOneFolder का उपयोग करें - फ़ाइलें इस लक्ष्य के बाद कॉपी किया जाना चाहिए। यदि आपको वीएस संदर्भ में लॉन्च होने पर ही अपना लक्ष्य आग लगाना है - मैंने जो लिंक पोस्ट किया है उसे जांचें और कुछ और शर्तों को जोड़ें - इस Condition="'$(BuildingInsideVisualStudio)'=='true' AND '$(VisualStudioVersion)'=='10.0'" जैसे विजुअल स्टूडियो लॉन्च की जांच के लिए यदि आप अधिक संदर्भ जोड़ते हैं कि आप किस प्रकार का लक्ष्य चाहते हैं प्रकाशन आदि के बाद लॉन्च करने के लिए- यह मुद्दा

+0

कृपया प्रश्न में अपडेट हुआ, धन्यवाद। –

+0

यह 'लक्ष्य' था जिसे मैं ढूंढ रहा था (यदि वहां कोई ब्लॉग पोस्ट है जो सभी एमएसबिल्ड लक्ष्यों का वर्णन करता है तो मैं इसे किसी भी व्यक्ति द्वारा साझा करने की सराहना करता हूं)। मेरा मुद्दा था कि मैं फ़ाइलों को केवल प्रकाशन पर स्विच करने के लिए बदलना चाहता था, निर्माण नहीं करना चाहता था। –

+0

@RobScott AFAIK वहाँ ऐसी कोई बात नहीं है - जिस तरह से MSBuild डिज़ाइन किया गया है का मतलब है कि लक्ष्यों और उनके संस्करणों (और ओवरराइड) के अपने सेट अपने मशीन के लिए बहुत अद्वितीय है और पर निर्भर करता है क्या SDKs \ परियोजना प्रकार \ MSBuild और वी.एस. आप के संस्करणों स्थापित। यह गतिशील रूप से आपके पर्यावरण के आधार पर एक निर्माण स्क्रिप्ट तैयार करता है। यह एक ही समय में बहुत शक्तिशाली लेकिन बहुत नाजुक है। तो इसमें लक्ष्य की कोई व्यापक सूची नहीं हो सकती है। आप सीख सकते हैं यह वर्बोज़ लॉग यह पढ़ने के लिए कैसे और कैसे .targets पढ़ने के लिए खुद को फाइल ताकि आप जिन चीज़ों की जरूरत है खोजने के लिए सक्षम हो जाएगा, लेकिन कोई नकल पुस्तिकाओं = ( –

4

मैं सिर्फ मैं कैसे विजुअल स्टूडियो 2013 में यहां यह लक्ष्य प्राप्त पर एक पोस्ट में लिखा था समझने के लिए और अधिक संदर्भ जोड़ और दूसरों की मदद कर सकते हैं:

<Target Name="Mytarget" AfterTargets="MSDeployPublish" > 
    <Message Text="The name of the publish profile is $(DestinationAppRoot)"/> 
    .... Here's where you do something awesome... 
</Target> 
: http://www.alexdresko.com/2015/02/28/taking-visual-studio-build-and-publish-events-to-the-next-level/

मूलतः, यह जादू है

मैं आपको अधिक जानकारी के लिए पूरी पोस्ट पढ़ने के लिए प्रोत्साहित करता हूं।

+1

वहाँ की तरह $ (DestinationAppRoot) किसी भी अधिक चर रहे हैं, उदाहरण के लिए गंतव्य URL को पाने के लिए? –

+0

मैं ईमानदारी से पता नहीं है,। 'DestinationAppRoot' और के लिए अपने पूरे हार्ड ड्राइव खोज का प्रयास करें आप कुछ उपयोगी हो सकते हैं। मुझे वास्तव में याद नहीं है कि मैं यहां पोस्ट किए गए समाधान के साथ कैसे आया। :) –

0

किसी अन्य प्रश्न का मेरा उत्तर कुछ उपयोगों का हो सकता है।

AfterPublish script doesn't run when I publish a web app

विशेष रूप से, 'प्रकाशित फ़ाइलें' के लिए पथ का उपयोग कर, यदि आपके पैरामीटर में $(WebProjectOutputDir)\$(WPPAllFilesInSingleFolder) के माध्यम से पारित कर सकते हैं। यह c:\{path to *.csproj}\obj\{build configuration}\Package\PackageTmp जैसा कुछ होगा।

+0

तो शायद इसे इसके बजाय डुप्लिकेट के रूप में वोट दिया जाना चाहिए? –

+0

मुझे नहीं पता कि यह 'सटीक डुप्लिकेट' है ... बस सोचा कि दूसरी जानकारी पर मेरी जानकारी उसे कहीं और प्राप्त करने में सहायक हो सकती है। यदि आपको आवश्यक समझा जाता है तो आपको ध्वजांकित करने देगा। धन्यवाद। – Terry

+0

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

1

मैंने हर दूसरे उत्तर की कोशिश की लेकिन वे अभी काम नहीं कर पाए। मेरे मामले में, मैं प्रकाशित करने कर रहा हूँ एक VSTO ऐड-में VS2015 के साथ है, तो हो सकता है कि वहाँ कुछ अलग हो रहा है, लेकिन यहां दो विकल्प है कि काम किया हैं:

<Target Name="AfterPublish"> 
    <Warning Text="publish warning 1" /> 
</Target> 
<Target Name="CustomTarget" AfterTargets="AfterPublish"> 
    <Warning Text="publish warning 2" /> 
</Target> 

कारण के भाग I (और assumedly अन्य) इसके साथ कठिन समय था कि Message कार्य कुछ भी प्रतीत नहीं होता है। मैं Output दृश्य में पाठ की अपेक्षा कर रहा था, लेकिन कुछ भी दिखाई नहीं दे रहा था। Error List में Message आइटम नहीं थे, लेकिन Warning का उपयोग करके, वे Error List में दिखाई दिए। दुर्भाग्यवश मुझे एमएसबिल्ड के बारे में पर्याप्त जानकारी नहीं है कि Message क्यों अपेक्षित व्यवहार नहीं कर रहा है।

+1

मैंने इन्हें वीएसएनईटी 2017 आरसी 4 और आफ्टरटेक्शंस = "आफ्टरप्लीश" में करने की कोशिश की, एक काम किया। धन्यवाद। – dstr