从控制台应用程序自动化Visual Studio 2010

时间:2010-05-17 18:16:24

标签: vb.net visual-studio visual-studio-2010 automation

我正在尝试运行以下代码(我从here获得)。代码只是在Visual Studio中创建一个新的“输出”窗格,并向其写几行。

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,但我不确定如何。有什么指针吗?

1 个答案:

答案 0 :(得分: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退出。