我想在执行宏期间出现问题时通知用户宏。我想知道是否可以将项添加到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(“...”)警告。
答案 0 :(得分:2)
您可以从宏中轻松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,例如到c:\ dlls \目录。由于Macros 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失败。
答案 1 :(得分: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)
希望这有帮助。
干杯,
Sebastiaan
答案 2 :(得分:0)