0

如果在执行宏期间出现问题,我想通知宏的用户。我想知道是否可以将项目添加到 Visual Studio 错误列表中?

可以在 AddIn 中执行此操作(如此),但我想从宏中执行相同的操作。

编辑


为了进一步阐明我想要实现的目标,这里是来自 Samples 宏库的示例(Alt+F8 -> Samples -> Utilities -> SaveView())

Sub SaveView()
    Dim name As String

    name = InputBox("Enter the name you want to save as:", "Save window layout")
    If (name = "") Then
        MsgBox("Empty string, enter a valid name.")
    Else
        DTE.WindowConfigurations.Add(name)
    End If
End Sub

而不是 MsgBox("...") 警报,我想将错误放入 VS 错误列表中。

4

3 回答 3

2

您可以从宏中轻松地在任务列表中添加项目。只需使用该文章中的 AddTaskToList 方法并将 m_objDTE 更改为 DTE。我已经尝试过了,它奏效了。

但是,在错误列表中添加项目可能是不可能的。您需要调用 VS 服务,查看如何在 add-in 中添加错误。我从这段代码创建了一个宏,但它不起作用。一般来说,VS 服务在宏中不起作用。我能够成功创建 ErrorListProvider。我可以访问它的方法和属性。但是调用 ErrorListProvider.Task.Add 导致 COM 异常。如果你想玩它,几个注意事项:如文章中所述,你需要从 GAC 中获取 4 个程序集例如到 c:\dlls\ 目录。由于宏 IDE 不允许您在添加引用时浏览,您需要将这些 dll 复制到 ...\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies 目录(将 10.0 更改为您的 VS 版本)。然后,当您在宏 IDE 中添加引用时,您应该会看到程序集。

GetService 函数始终返回 Nothing。将以下字段添加到类中:

Private serviceProvider As IServiceProvider = New Microsoft.VisualStudio.Shell.ServiceProvider(CType(DTE, Microsoft.VisualStudio.OLE.Interop.IServiceProvider))

并在 GetService 函数更改行中:

objService = Microsoft.VisualStudio.Shell.Package.GetGlobalService(serviceType)

objService = serviceProvider.GetService(serviceType)

正如我所写,一切似乎都很好,但 ErrorListProvider.Task.Add 失败。

于 2011-03-16T10:57:16.890 回答
2

我认为对于您的情况,将某些内容输出到您自己的输出窗格会更合适。错误列表通常用于用户正在处理的项目中的错误,而不是由运行宏引起的错误。尤其是当有人说它做不到的时候。:)

输出到您自己的输出窗格非常简单:

DTE.Windows.Item(Constants.vsWindowKindOutput).Activate()
Dim panes As OutputWindowPanes = window.OutputWindowPanes
Dim my_pane As OutputWindowPane
Try
    my_pane = panes.Item("SaveView")
Catch exception As System.ArgumentException
    my_pane = panes.Add("SaveView")
End Try
my_pane.Activate()
my_pane.OutputString("Empty string, enter a valid name." + vbCrLf)

希望这可以帮助。

干杯,

塞巴斯蒂安

于 2011-03-17T11:02:44.783 回答
0

这不是你想要的吗?

HOWTO:通过从 Visual Studio 加载项导航到错误列表添加错误

http://www.mztools.com/articles/2008/MZ2008022.aspx

于 2014-10-03T15:48:11.230 回答