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