2010-05-17 123 views
0

我試圖運行下面的代碼(我從here得到)。該代碼只是在Visual Studio中創建一個新的「輸出」窗格並向其寫入幾行內容。從控制檯應用程序自動化Visual Studio 2010

Public Sub WriteToMyNewPane() 
    Dim win As Window = _ 
     dte.Windows.Item(EnvDTE.Constants.vsWindowKindOutput) 
    Dim ow As OutputWindow = win.Object 
    Dim owPane As OutputWindowPane 
    Dim cnt As Integer = ow.OutputWindowPanes.Count 
    owPane = ow.OutputWindowPanes.Add("My New Output Pane") 
    owPane.Activate() 
    owPane.OutputString("My text1" & vbCrLf) 
    owPane.OutputString("My text2" & vbCrLf) 
    owPane.OutputString("My text3" & vbCrLf) 
End Sub 

而不是運行它作爲一個宏觀的,我要運行它連接到Visual Studio 2010中我有一個很難搞清楚如何設置的當前運行的實例一個獨立的控制檯應用程序值爲dte。我想我可能需要調用GetActiveObject,但我不知道如何。任何指針?

+0

這似乎是一個非常不尋常的要求。你想達到什麼目的?假設它甚至是可能的,這將如何與VS 2010的兩個或更多運行實例一起工作? 如果你真的需要VS與外部操作系統進程進行通信,請考慮編寫一個自定義擴展,它使用命名管道,WCF,原始套接字等與另一個進程進行交互。 – 2010-05-17 18:24:21

+0

@Simon,我想你是誤解......我不希望VS與另一個進程通信...我想要一個控制檯應用程序(一個非常簡單的)與當前正在運行的VS實例進行通信。這似乎是自動化正在運行的應用程序的一個非常標準的情況(在這種情況下,應用程序是Visual Studio) – JoelFan 2010-05-17 18:27:35

+0

VS <> ConsoleApp通信可以在任何方向。我仍然認爲使用VS擴展通過(例如)WCF監聽來自其他進程的命令將是一條路。 VS擴展可以完全訪問Visual Studio 2010 SDK,並且使用託管代碼而不是VBScript編寫。此外,您還可以將其他功能構建到擴展中,例如安全性和活動日誌記錄。 – 2010-05-17 19:52:24

回答

2

是的,這是有些可能的,DTE接口支持進程外激活。以下是顯示該方法的示例代碼:

Imports EnvDTE 

Module Module1 
    Sub Main() 
     Dim dte As DTE = DirectCast(Interaction.CreateObject("VisualStudio.DTE.10.0"), EnvDTE.DTE) 
     dte.SuppressUI = False 
     dte.MainWindow.Visible = True 
     Dim win As Window = dte.Windows.Item(Constants.vsWindowKindOutput) 
     Dim ow As OutputWindow = DirectCast(win.Object, OutputWindow) 
     Dim owPane As OutputWindowPane = ow.OutputWindowPanes.Add("My New Output Pane") 
     owPane.Activate() 
     owPane.OutputString("My text1" & vbCrLf) 
     owPane.OutputString("My text2" & vbCrLf) 
     owPane.OutputString("My text3" & vbCrLf) 
     Console.WriteLine("Press enter to terminate visual studio") 
     Console.ReadLine() 
    End Sub 
End Module 

上一條語句顯示爲什麼這不太實際。只要程序停止運行,coclass上的最後一個引用計數就會消失,從而使Visual Studio退出。

+0

我可以獲取當前運行的實例而不是啓動一個新的實例嗎? – JoelFan 2010-05-17 19:37:19

+0

@Joel:如果有兩個或更多VS實例會怎麼樣 - 上面的VBScript會如何選擇? – 2010-05-17 19:44:29

+0

@Joel:你不能,你只能創建一個新的實例。標準的COM服務器實踐。某些服務器在ROT中發佈類工廠,但Visual Studio不會。 – 2010-05-17 19:50:07

相關問題