无需使用DTE即可访问构建事件

时间:2020-01-26 00:10:32

标签: c# visual-studio visual-studio-2019 vsix

捕获构建事件时,您可以简单地监听DTE2.Events.BuildEvents事件。但是,可以在不使用DTE的情况下收听这些事件。我已经听过一些人和消息来源的消息,听说您通常应该避免使用DTE,如果可能的话,由于其执行不佳或其他原因。

2 个答案:

答案 0 :(得分:1)

通常,如果您想使Visual Studio自动化,则可以使用DTE(这是标准的自动化方法),也可以使用本机界面。本机接口以'IVs ...'开头IVs解决方案。在这两种情况下,该技术都是古老的,文献记载很少。正如您所建议的,本机解决方案确实会更好。

话虽如此,对于在我需要的构建上运行的任务,我最终使用了DTE,它可以更容易编程并使其可靠地工作。

我发现mztools.com网站上同样古老的文章(而不是工具!)对这些东西以及MSDN文档当然非常有用。在您的Google搜索中添加“ mztools”。例如,mztools says on build events(Google'mztools构建事件')是有用的,即使它可以追溯到2013年。

答案 1 :(得分:0)

我只想共享实际有效并完全实现我所需要的代码。通过@Rich N的帮助,这是有可能的,谢谢。实际上比我想象的要容易,它总是相同的过程

  1. Svs...方法中获取GetService类,并将其强制转换为相应的接口。
  2. 比用Advise...方法附加事件处理程序类。
// First of get the IVsSolutionBuildManager via the SVsSolutionBuildManager with the GetService method
var service = GetService(typeof(SVsSolutionBuildManager)) as IVsSolutionBuildManager;

// Appending the Events
service.AdviseUpdateSolutionEvents(new Events(), out var cookie)

// The class which handles the Event callbacks
public class Events : IVsUpdateSolutionEvents
{
   // The implemented methods from the interface
}