0

问:如何确定项目成功但未构建(无更改)?DTE构建事件:成功但未构建的通知

我知道,我可以利用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构建成功参数表明构建成功,而不是失败。如果不存在错误,则无论更改与否,结果总是如此。

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

关于SO的现有问题,例如28019853629125不能归结为这种粒度/区别。

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

回答

1

的IVsBuildStatusCallback.BuildEnd方法提供比DTE相同的信息,所以也没什么帮助:

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

一些解决方法,我可以想像:

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

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

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

+0

我将上面的答案标记为答案,但方法不同。我必须在输出程序集之前和之后获得DateTime标记并对它们进行比较。我为此使用了IvsOutputWindowPane,而不是IVsBuildableProjectCfg。我猜不同的人为不同的人。检索输出构建窗口文本不是一个可行的解决方案。 – 2015-02-25 22:48:57