我正在尝试运行以下代码(我从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,但我不确定如何。有什么指针吗?
答案 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退出。