问:如何确定项目成功但未构建(无更改)?
我知道使用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的现有问题,例如2801985和3629125,不会归结为此粒度/区别。
如何以编程方式确定项目在构建请求中是否成功但未构建(是最新的)?
答案 0 :(得分:1)
IVsBuildStatusCallback.BuildEnd方法提供的信息与DTE相同,所以没有帮助:
如果构建操作成功完成,则为true。在最新检查之后,当项目配置是最新的时,fSuccess设置为true,而当项目配置不是最新的时,则设置为false。
我可以想象的一些解决方法:
您可以在构建之前调用IVsBuildableProjectCfg.StartUpToDateCheck方法,以确定项目是否是最新的。您可以提供一个实现IVsOutputWindowPane接口的类并解析输出(有些容易出错,受本地化问题影响)
如果项目是最新的,编译后的输出dll或exe的日期时间在构建后不会改变。
在这两种情况下,您都需要在构建之前和构建之后执行操作。