有沒有一種方法可以捕獲構建輸出,即輸出到輸出窗口的文本?現在我唯一的選擇是從輸出窗口複製和粘貼文本,是從命令行生成並將輸出重定向到文件。在Visual Studio 2010中捕獲構建輸出
快速查看C#編譯器命令行選項不會顯示任何指定輸出文件的警告和錯誤等消息的選項,所以我猜測VS掛鉤到csc.exe進程的輸出流中,以捕獲它文本並將其寫入輸出窗口。也許有一個自定義應用程序也可以掛鉤的差距。
有沒有一種方法可以捕獲構建輸出,即輸出到輸出窗口的文本?現在我唯一的選擇是從輸出窗口複製和粘貼文本,是從命令行生成並將輸出重定向到文件。在Visual Studio 2010中捕獲構建輸出
快速查看C#編譯器命令行選項不會顯示任何指定輸出文件的警告和錯誤等消息的選項,所以我猜測VS掛鉤到csc.exe進程的輸出流中,以捕獲它文本並將其寫入輸出窗口。也許有一個自定義應用程序也可以掛鉤的差距。
將以下宏添加到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
的Visual Studio提供了一個輸出 窗口(「查看」,「其他窗口」, 「輸出」菜單),以顯示消息,調試 信息等。即窗口提供 幾個窗格可通過組合框來選擇 ,如「源 控制」,「生成」,「調試」,等等
自動化模型(EnvDTE)提供 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終極測試...
我想你可以使用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));
}
希望幫助!
您可以使用Visual Studio Extensibility(http://msdn.microsoft.com/en-us/vstudio/ff718165)來讀取輸出窗口的內容。本主題可以顯示如何獲取它的參考:How do I write to the Visual Studio Output Window in My Custom Tool?。
我不知道,如果這如果你知道這件事情會讓事情變得更容易,但是visual studio設置了一個環境變量VS_UNICODE_OUTPUT,cl.exe編譯器使用它來直接將它的輸出發送到VS.如果清除此變量,則cl.exe輸出將轉爲標準輸出並出錯。
希望有幫助!
謝謝,我會檢查出來。 – ProfK 2011-09-13 18:57:56
它將msbuild.exe的輸出重定向到輸出窗口。這裏沒有中間地帶,無論是從命令行構建還是從IDE構建。它必須按照它的方式工作,沒有其他方法可以通過錯誤列表窗口向您顯示構建錯誤。 – 2011-03-14 13:35:17
@Hans,我不是在命令行和IDE之間尋找中間地帶。我正在尋找一種方法來在IDE構建過程中自動捕獲輸出到輸出窗口的內容,因爲我認爲我在問題的第一段已經清楚了。 – ProfK 2011-03-14 14:38:52