【问题标题】:Add item to Error List in Macro将项目添加到宏中的错误列表
【发布时间】:2011-03-08 14:42:29
【问题描述】:

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

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

编辑


为了进一步阐明我想要实现的目标,这里是来自 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

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

【问题讨论】:

  • 我不确定您需要什么。宏的执行是否意味着宏扩展?如果答案是肯定的,您可以使用#error,它会产生编译器时错误消息。否则,为什么要在进程运行时将错误添加到 Visual Studio 错误列表中?
  • 运行宏是指通过 Tools/Macros/Run 宏执行它或从宏浏览器调用它 (Alt+f8 || Tools/Macros/MacroExplorer)

标签: visual-studio macros envdte


【解决方案1】:

您可以通过宏轻松add an item in the Task List。只需使用该文章中的 AddTaskToList 方法并将 m_objDTE 更改为 DTE。我试过了,效果很好。

但是,在错误列表中添加项目可能是不可能的。你需要调用VS服务,见how adding an error is done in an add-in。我从这段代码创建了一个宏,但它不起作用。一般来说,VS 服务在宏中不起作用。我能够成功创建 ErrorListProvider。我可以访问它的方法和属性。但是调用 ErrorListProvider.Task.Add 导致 COM 异常。如果你想玩它,几个注意事项: 如文章中所述,您需要get 4 assemblies out of the GAC e.g.到 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 失败。

【讨论】:

  • 所以你说这是不可能的。我会再等一会儿,看看是否有人设法让它工作。如果没有,您将获得赏金,因为您比我走得更远。谢谢。
【解决方案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)

希望这会有所帮助。

干杯,

塞巴斯蒂安

【讨论】:

    【解决方案3】:

    这不是你想要的吗?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多