Msbuild के साथ निष्पादन कार्य कैसे प्राप्त करें


83

मैं कार्य को निष्पादित करके सरल आउटपुट प्राप्त करने की कोशिश कर रहा हूं msbuild:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Test">
    <Exec Command="echo test output">
      <Output TaskParameter="Outputs" ItemName="Test1" />
    </Exec>
    <Exec Command="echo test output">
      <Output TaskParameter="Outputs" PropertyName="Test2" />
    </Exec>
    <Message Text="----------------------------------------"/>
    <Message Text="@(Test1)"/>
    <Message Text="----------------------------------------"/>
    <Message Text="$(Test2)"/>
    <Message Text="----------------------------------------"/>
  </Target>
</Project>

लेकिन अगला आउटपुट प्राप्त करें:

  echo test output
  test output
  echo test output
  test output
  ----------------------------------------
  ----------------------------------------
  ----------------------------------------

मैं अपनी स्क्रिप्ट द्वारा आउटपुट कैसे प्राप्त कर सकता हूं?



सच लगता है, धन्यवाद मुझे याद आती है सूचना
tbicr

1
अच्छी तरह से प्रलेखन आम तौर पर संभव नहीं है, लेकिन क्या है के बारे में नहीं है। ऐसा कहने के बाद, आपका प्रश्न सामान्य प्रतीत होता है, इसलिए शायद आपको उचित "सामुदायिक सामग्री" जोड़ना चाहिए और इस प्रकार MSDN प्रलेखन में सुधार करना चाहिए।
क्रिश्चियन.के

2
सभा से संबंधित फ़ाइल हैक से अलग ... संबंधित पोस्ट, ऐसा नहीं लगता है कि निष्पादन निष्पादन के साथ बहुत अच्छा कर सकता है। वास्तव में, कुछ लोग msbuildextensions में एक बेहतर संस्करण के लिए पूछ रहे हैं। यह क्या आप निष्पादन के साथ करने की कोशिश कर रहे हैं? आप जो भी प्रयास कर रहे हैं उसे पूरा करने का एक आसान तरीका हो सकता है। उदाहरण के लिए, आप MSBuild.ExtensionPack.Framework.DateAndTime कार्य से डेटाटाइम मान प्राप्त कर सकते हैं। अगर आपको वास्तव में इस कार्यक्षमता की आवश्यकता है, तो मुझे लगता है कि कस्टम msbuild कार्य का निर्माण करना सबसे अच्छा रास्ता होगा। जब मेरे पास कुछ समय होता है, तो मैं एक कोड़ा मारता हूं और इसे यहां पोस्ट करता हूं।
दान सेशरपस्टर

stackoverflow.com/questions/11096148/… इस लिंक का उपयोग करता है <संदेश महत्व = "उच्च" पाठ = "$ (Test2)" />
साइरस डाउनी

जवाबों:


142

सबके लिए अच्छी खबर है! अब आप <Exec>.NET 4.5 से आउटपुट कैप्चर कर सकते हैं ।

ऐशे ही:

<Exec ... ConsoleToMSBuild="true">
  <Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
</Exec>

सीधे शब्दों में:

  • ConsoleToMsBuild="true"अपने <Exec>टैग में जोड़ें
  • ConsoleOutputकिसी <Output>टैग में पैरामीटर का उपयोग करके आउटपुट कैप्चर करें

आखिरकार!

यहाँ प्रलेखन


2
उफ़, हाँ। यह यहाँ है: msdn.microsoft.com/en-us/library/ms124731(v=VS.110).aspx
Avi चेरी

2
यह MSBuild 12 के साथ काम करता है, जो Microsoft बिल्ड टूल 2013 द्वारा स्थापित किया गया है: microsoft.com/en-us/download/details.aspx?id=40760
alexandrul

1
@AviCherry क्या आप टिप्पणियों में के बजाय अपने उत्तर में प्रलेखन के लिए लिंक शामिल कर सकते हैं? क्या आप टीएफएस टीम बिल्ड 2012 के संदर्भ में काम करने में सक्षम थे?
रयान गेट्स

3
शानदार खोज, @AviCherry! क्या एक निरीक्षण है कि ConsoleToMSBuild ConsoleOutput, Exec कार्य के लिए प्रलेखन से ही गायब है ( msdn.microsoft.com/en-us/library/x8zx72cd.aspx )।
बांध

1
इसे अब यहाँ प्रलेखित किया गया है: docs.microsoft.com/en-us/visualstudio/msbuild/exec-task
Raif Atef

7

मैं उस बिंदु पर पहुंच गया हूं, जहां मैं MSBuild की सीमाओं से बहुत निराश हूं, और जो सामान काम करने वाला है, लेकिन कम से कम (हर संदर्भ में नहीं), वह बहुत अधिक कभी भी मुझे MSBuild के साथ कुछ भी करने की आवश्यकता है , मैं C # में एक कस्टम बिल्ड कार्य बनाता हूं।

यदि कोई अन्य सुझाव काम नहीं कर रहा है, तो आप निश्चित रूप से इसे इस तरह से कर सकते हैं।


3
मैं आपका दर्द महसूस करता हूं - हालांकि मेरा कस्टम कार्य एक अजगर स्क्रिप्ट है।
नेटवर्कबर्गर

समझ में आता है, लेकिन मुझे लगता है कि MSBuild आउटपुट / त्रुटि कंसोल में जानकारी पाइप करने के लिए एक संरचित तरीके से अधिक है। हालांकि मुझे निश्चित रूप से लगता है कि यह बैच फ़ाइलों से ऊपर एक कदम है
नैट-विल्किंस

2
मुझे पता है कि यह आपके द्वारा इस मुद्दे के होने के बाद से ट्रैक से नीचे है, लेकिन मुझे बस एक ही बात होती थी और इसे रूटव्यू <प्रोजेक्ट> तत्व में ToolsVersion = "12.0" सेट करके हल किया गया था। आशा है कि यह कुछ मदद का है :)
पॉल कैरोल

4

आप एक सरणी की तरह संरचना करने के लिए और एक सादे स्ट्रिंग जहां उत्पादन लाइनों अर्धविराम द्वारा अलग करने के लिए नहीं पर कब्जा उत्पादन करना चाहते हैं, का उपयोग ITEMNAME बजाय PropertyName :

<Exec ... ConsoleToMSBuild="true">
  <Output TaskParameter="ConsoleOutput" ItemName="OutputOfExec" />
</Exec>

1

आप आउटपुट को किसी फ़ाइल में पाइप कर सकते हैं ताकि वह बोल सके, और उसे वापस पढ़ सके।

echo test output > somefile.txt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.