2011-03-14 4 views
7

빌드 출력, 즉 출력 창에 출력되는 텍스트를 캡처 할 수있는 방법이 있습니까? 지금은 출력 창에서 텍스트를 복사하고 붙여 넣을 수있는 유일한 방법은 명령 줄에서 작성하고 출력을 파일로 리디렉션하는 것입니다.Visual Studio 2010 내에서 빌드 출력 캡처

C# 컴파일러 명령 줄 옵션을 간략하게 살펴보면 경고 및 오류와 같은 메시지의 출력 파일을 지정하는 옵션이 표시되지 않으므로 VS 캡처를 csc.exe 프로세스의 출력 스트림으로 추측하고 있습니다. 텍스트를 선택하고 출력 창에 씁니다. 어쩌면 사용자 지정 응용 프로그램도 연결할 수있는 틈이있을 수 있습니다.

+0

msbuild.exe의 출력을 출력 창으로 리디렉션합니다. 여기서 중도는 없습니다. 명령 줄에서 빌드하거나 IDE에서 빌드하십시오. 그것은 그렇게하는 방식으로 작동해야합니다. 오류 목록 창에서 빌드 오류를 표시하는 다른 방법은 없습니다. –

+0

@Hans, 저는 명령 줄과 IDE 사이의 중간 지점을 찾고 있지 않습니다. IDE에서 빌드하는 동안 출력 창에 출력되는 내용을 자동으로 캡처하는 방법을 찾고 있습니다. 제 질문의 첫 번째 단락에서 충분히 명확하게 생각한 것 같습니다. – ProfK

답변

5

VS EnvironmentEvent 모듈 (도구 -> 매크로 -> 매크로 IDE ...) 또는 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)이을 제공한다 "소스 제어", "디버그" "빌드"와 같은 콤보를 통해 를 선택할 수 있습니다 여러 창을 제공합니다3210 the 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 

위의

뿐만 아니라 프로젝트별로 아마 출력 빌드 정보에 쥐게 할 수 있습니다. 빌드 로그 등의 파일 이름은 현재 빌드중인 프로젝트 (아마도 이것에 대해서는 확실하지 않음)를 기반으로 구성 될 수 있으며 무엇보다 빌드 기록을 유지할 수 있습니다.

하나에 연결할 수 있습니다 VS 이벤트의 전체, 그래서 사람이 할 수있는 일의 종류는

이 ... VS2010 Ultimate에서 테스트되었습니다 끝없는 있습니다

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)); 
} 

희망이 도움이!

3

나는이 알고하지 않습니다 이 사실을 알면 쉽게 작업 할 수 있지만 비주얼 스튜디오는 환경 변수 VS_UNICODE_OUTPUT을 설정하며이 값은 cl.exe 컴파일러에서 출력을 VS로 직접 전송하는 데 사용됩니다. 이 변수를 지우면 cl.exe 출력이 표준 출력으로 바뀌고 오류가 발생합니다.

희망 하시겠습니까?

+0

감사합니다. 나는 그것을 조사 할 것이다. – ProfK

관련 문제