1

我正在研究一个Visual Studio扩展,它将“清理”编译错误消息以使它们更易于阅读。Visual Studio扩展:如何拦截/修改/删除错误列表中的构建错误消息?

我已经知道如何产生我自己的错误。相反,我想要做的是修改/替换由于解析编译输出而导致Visual Studio添加到“错误列表”窗格的错误消息的文本。

到目前为止,我一直没有找到一种方法来做到这一点。这里是我的发现:

  • SVsErrorList中的IVsTaskItems都是只读的,所以我不能直接编辑它们。
  • 我也无法删除IVsTaskItems,出于同样的原因(因此不能用我自己的替换它们)。
  • 我可以将自己的文本附加到“生成输出窗口”窗格,但我无法修改现有文本,以便在Visual Studio分析它们之前编辑错误消息。

有没有其他方法可以实现这个目标?在那里,扩展内,一个办法:

  • 勾调用VS内部使得它的加工前添加一个错误消息的错误列表,并改变它?
  • 挂钩构建过程的输出,并修改它之前,它由VS处理?
  • 通过其他方式来实现这一点?
+0

肯定有些事情可以做,因为我已经使用了一个扩展插入到构建过程中,并根据项目是否构建或失败来修改输出窗口的颜色。但不知道它是如何做到的。 VSColorOutput:http://visualstudiogallery.msdn.microsoft.com/f4d9c2b5-d6d7-4543-a7a5-2d7ebabc2496 – demoncodemonkey

+0

@demoncodemonkey输出窗口是禁用编辑的常规文本视图。你所指的扩展只是一个语法高亮显示,但不能控制窗口的实际内容。 –

回答

2

这样做的正确方法是修改编译过程的输出,或者修改项目系统和/或.targets文件将信息从编译器报告给IDE的方式。如果您无法控制编译器或项目系统,那么这将是一件难以完成的任务。

  1. 显示任务落实IVsTaskItem,该接口实际上是由客户端代码实现的,所以没有保证任务的项目将提供修改其任何价值的能力。

  2. IVsTaskList2接口增加了一个方法RemoveTasks,但它要求您提供提供程序注册时返回的提供程序cookie(并且无法获取该提供程序)。

+0

不幸的是,我希望这个扩展不依赖于如何向IDE报告信息(例如,以支持任意编译器以及外部构建工具)。这就是为什么我想象这样做的唯一方法是通过一些基于钩子的拦截技巧。 (PS:感谢您在ANTLR4上的工作;我用它取得了巨大的成功)。 –

+1

是的,这只是不支持。并且没有任何东西可以通过任何意义上的“钩”... –

+0

感谢您的确认,杰森。 –