DTE构建事件:成功通知但未构建

时间:2015-02-23 23:14:55

标签: visual-studio build visual-studio-extensions visual-studio-addins envdte

问:如何确定项目成功但未构建(无更改)?

我知道使用Visual Studio包可以使用构建事件。

_dte.Events.BuildEvents.OnBuild* += **;

*是事件处理程序名称的其余部分,**是事件处理程序的名称。

构建项目时有两种类型的成功代码:

========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========

========== Build: 1 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========

第一个成功构建,但不需要进行任何更改,而后者已更改并成功构建。

DTE build Success参数表示构建成功,而不是失败。如果不存在错误,则无论是否有任何更改,结果始终为真。

可悲的是,没有任何论据表明成功,但没有建立,成功和建立。有成功吗?

此处有关SO的现有问题,例如28019853629125,不会归结为此粒度/区别。

如何以编程方式确定项目在构建请求中是否成功但未构建(是最新的)?

1 个答案:

答案 0 :(得分:1)

IVsBuildStatusCallback.BuildEnd方法提供的信息与DTE相同,所以没有帮助:

如果构建操作成功完成,则为true。在最新检查之后,当项目配置是最新的时,fSuccess设置为true,而当项目配置不是最新的时,则设置为false。

我可以想象的一些解决方法:

  • 您可以在构建之前调用IVsBuildableProjectCfg.StartUpToDateCheck方法,以确定项目是否是最新的。您可以提供一个实现IVsOutputWindowPane接口的类并解析输出(有些容易出错,受本地化问题影响)

  • 如果项目是最新的,编译后的输出dll或exe的日期时间在构建后不会改变。

在这两种情况下,您都需要在构建之前和构建之后执行操作。