2011-03-14 15 views
7

के भीतर बिल्ड आउटपुट कैप्चर करें क्या कोई तरीका है कि मैं बिल्ड आउटपुट कैप्चर कर सकता हूं, यानी आउटपुट विंडो में आउटपुट वाला टेक्स्ट? आउटपुट विंडो से पाठ को प्रतिलिपि बनाने और चिपकाने का मेरा एकमात्र विकल्प, कमांड लाइन से बनाना और आउटपुट को फ़ाइल में रीडायरेक्ट करना है।विजुअल स्टूडियो 2010

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

+0

यह आउटपुट विंडो में msbuild.exe के आउटपुट को रीडायरेक्ट करता है। यहां कोई मध्य ग्राउंड नहीं है, या तो आप कमांड लाइन से बनाते हैं या आप आईडीई से बनाते हैं। इसे जिस तरह से काम करना चाहिए, उसमें आपको कार्य त्रुटियों को दिखाने के लिए त्रुटि सूची विंडो प्राप्त करने का कोई अन्य तरीका नहीं है। –

+0

@ हंस, मैं कमांड लाइन और आईडीई के बीच मध्य मैदान की तलाश नहीं कर रहा हूं। मैं आईडीई बिल्ड के दौरान आउटपुट विंडो में आउटपुट को स्वचालित रूप से कैप्चर करने का एक तरीका ढूंढ रहा हूं, क्योंकि मुझे लगता है कि मैंने अपने प्रश्न के पहले पैराग्राफ में पर्याप्त स्पष्ट किया है। – ProfK

उत्तर

5

वीएस EnvironmentEvent मॉड्यूल (टूल्स-> मैक्रोज़-> मैक्रोज़ आईडीई ...) या ALT + F11 में निम्न मैक्रो जोड़ें। निर्माण के बाद मैक्रो चलता है या नहीं, सफलतापूर्वक या नहीं।

यह आउटपुट विंडो से टेक्स्ट आउटपुट पाइप करेगा, विशेष रूप से Build आउटपुट विंडो के build_output.log पर देखें। अन्य IDE Guids can be found on MSDN

एक संदर्भ के रूप में, समाधान पर HOWTO: Get an OutputWindowPane to output some string from a Visual Studio add-in or macro

दृश्य स्टूडियो संदेशों को दिखाने के लिए एक आउटपुट खिड़की ("देखें", "अन्य विंडोज", "आउटपुट" मेनू) प्रदान करता है, डिबग जानकारी आधारित था , आदि यही कारण है कि खिड़की जैसे कि "स्रोत नियंत्रण", "बिल्ड" "डीबग", आदि

स्वचालन मॉडल (EnvDTE)प्रदान करता है कई शीशे कि एक combobox के माध्यम से चुना जा सकता है, प्रदान करता हैEnvDTE.OutputWindow, EnvDTE.OutputWindowPanes और EnvDTE.OutputWindowPane कक्षाएं।

Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone 

     Const BUILD_OUTPUT_PANE_GUID As String = "{1BD8A850-02D1-11D1-BEE7-00A0C913D1F8}" 

     Dim t As OutputWindowPane 
     Dim txtOutput As TextDocument 
     Dim txtSelection As TextSelection 
     Dim vsWindow As Window 

     vsWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput) 

     Dim vsOutputWindow As OutputWindow 
     Dim objOutputWindowPane As OutputWindowPane 
     Dim objBuildOutputWindowPane As OutputWindowPane 
     vsOutputWindow = DirectCast(vsWindow.Object, OutputWindow) 

     For Each objOutputWindowPane In vsOutputWindow.OutputWindowPanes 
      If objOutputWindowPane.Guid.ToUpper = BUILD_OUTPUT_PANE_GUID Then 
       objBuildOutputWindowPane = objOutputWindowPane 
       Exit For 
      End If 
     Next 


     txtOutput = objBuildOutputWindowPane.TextDocument 
     txtSelection = txtOutput.Selection 

     txtSelection.StartOfDocument(False) 
     txtSelection.EndOfDocument(True) 
     objBuildOutputWindowPane.OutputString(Date.Now) 

     txtSelection = txtOutput.Selection 
     solutionDir = IO.Path.GetDirectoryName(DTE.Solution.FullName) 

     My.Computer.FileSystem.WriteAllText(solutionDir & "\build_output.log", txtSelection.Text, False) 


     MsgBox(txtSelection.Text) 

    End Sub 

ऊपर एक प्रति परियोजना के आधार पर शायद उत्पादन निर्माण की जानकारी के साथ-साथ करने के लिए बदलाव किया जा सकता है। निर्माण लॉग इत्यादि के लिए फ़ाइल नाम संभवतः वर्तमान प्रोजेक्ट के निर्माण के आधार पर कॉन्फ़िगर किया जा सकता है (इसके बारे में भी निश्चित नहीं है) और सबसे ऊपर आप शायद निर्माण इतिहास बना सकते हैं।

वहाँ वी.एस. कि घटनाओं में से एक में हुक कर सकते हैं की एक पूरी, इसलिए चीजों के प्रकार के एक कर सकते हैं अंतहीन

यह VS2010 परम पर परीक्षण किया गया था ... हैं

3

मुझे लगता है कि आप DebugView का उपयोग कर सकते हैं या आउटपुट विंडो परिणामों को कैप्चर करने के लिए एक एप्लिकेशन विकसित कर सकते हैं। MSDN से

उदाहरण आउटपुट विंडो प्रबंधन करने के लिए:

public void writeReadOW(DTE2 dte) 
{ 
    // Add-in code. 
    // Create a reference to the Output window. 
    // Create a tool window reference for the Output window 
    // and window pane. 
    OutputWindow ow = dte.ToolWindows.OutputWindow; 
    OutputWindowPane owP; 
    // Create a reference to the pane contents. 
    TextDocument owPTxtDoc; 
    EditPoint2 strtPt; 

    // Select the Build pane in the Output window. 
    owP = ow.OutputWindowPanes.Item("Build"); 
    owP.Activate(); 
    owPTxtDoc = owP.TextDocument; 

    // Put some text in the pane. 
    owP.OutputString("Testing 123."); 
    // Retrieve the text contents of the pane. 
    System.Windows.Forms.MessageBox.Show("Startpoint: " + 
     owPTxtDoc.StartPoint.DisplayColumn); 
    strtPt = (EditPoint2)owPTxtDoc.StartPoint.CreateEditPoint(); 
    System.Windows.Forms.MessageBox.Show 
     (strtPt.GetText(owPTxtDoc.EndPoint)); 
} 

आशा मदद करता है!

-1

आउटपुट विंडो की सामग्री को पढ़ने में सक्षम होने के लिए आप विजुअल स्टूडियो एक्सटेंसिबिलिटी (http://msdn.microsoft.com/en-us/vstudio/ff718165) का उपयोग कर सकते हैं। यह विषय दिखा सकता है कि इसका संदर्भ कैसे प्राप्त करें: How do I write to the Visual Studio Output Window in My Custom Tool?

3

मैं इस करता है, तो पता नहीं है यदि आप इसे जानते हैं तो चीजों को आसान बनाता है लेकिन विजुअल स्टूडियो ने पर्यावरण परिवर्तनीय VS_UNICODE_OUTPUT सेट किया है और इसका उपयोग cl.exe कंपाइलर द्वारा सीधे अपने आउटपुट को VS पर भेजने के लिए किया जाता है। यदि आप इस चर को साफ़ करते हैं तो cl.exe आउटपुट मानक आउट हो जाता है और त्रुटि हो जाती है।

आशा है कि मदद करता है!

+0

धन्यवाद, मैं इसे देख लूंगा। – ProfK

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