【问题标题】:How to distinguish between compile and build with D2007?如何区分用D2007编译和构建?
【发布时间】:2013-10-15 12:30:18
【问题描述】:

我已成功注册 IDE 通知程序 (IOTAIDENotifier80),因此我收到 AfterCompile 通知。

是否有可能找出项目是构建还是编译/制作?

我发现 this answer 关于实现 IOTAProjectCompileNotifier 但这在 D2007 中不可用。

还有什么办法吗?我可以采用无证方式,因为这仅适用于内部专家。

更新:我需要使用包含版本信息资源的外部 .rc 文件复制“AutoInc 内部版本号”功能。也许这可以通过 BuildEvents 来完成?虽然我喜欢在 IDE 中记录显示更新版本号的消息的能力...

【问题讨论】:

  • FWIW,我认为接口是IOTACompileNotifier,是在 D2010 中添加的。如果有一种无证的方式,就是这样。也许您需要注册通知器IOTACompileServices 的接口是由D2007 实现的,但只是没有在D2007 ToolsAPI.pas 中发布。值得一试。它的 GUID 是 {68C486EF-C079-4D40-B462-2C0DD21FE342}。如果没有,您可以选择安装代码挂钩来拦截调用 make/build 的事件。这很棘手,因为您需要安装蹦床,并且需要一个不错的挂钩库。
  • 不幸的是,没有运气。我已将 IOTACompileServices 的声明复制到我的单元中,但投射 BorlandIDEServices as IOTACompileServices 失败。
  • 我曾希望有一种“旧方法”来做到这一点,在 D2007 中仍然会得到一些支持。

标签: delphi delphi-2007 toolsapi


【解决方案1】:

我不知道编写专家或连接到 IDE,而且我害怕蹦床。话虽如此,我注意到您可以通过监视项目输出文件夹中文件的时间戳来分辨编译和构建之间的区别,但这种区别只有在没有代码(*.pas 或 *.dfm)时才明显自上次编译或构建以来已更改。换句话说,当发生代码更改时,您无法通过监控时间戳来区分差异。但是,当自上次编译或构建后没有代码更改时,编译只会更改 exe 的时间戳(dcu 时间戳不会更改)。

因此,在没有其他更优雅的解决方案的情况下,并且只有当您真的迫切需要这些信息(即,它是编译的还是构建的?)时,我才能为您推荐一个两部分的解决方案。

第 1 部分。编写一个流程来监控输出文件夹中时间戳的变化,以及

第 2 部分。告诉您的开发人员在 D2007 中存在一个使您的构建过程复杂化的错误,但是只需编译两次或构建两次即可轻松克服此错误(或者,如果您知道如何自动化,那么请终生)。如果您可以让您的开发人员编译两次或构建两次,那么在第二次编译或构建时,您将能够通过测试 dcu 的时间戳在第二次编译或构建时是否更改来推断它是编译还是构建。

现在,我会站在顽皮的角落问自己“为什么是我?”。干杯。

【讨论】:

  • 感谢您的有趣回复。我会记住这一点,虽然这将是相当多的工作,考虑到您必须从项目配置中获取输出文件夹,并且它必须适用于不同类型的输出文件(dll/bpl/exe )。
猜你喜欢
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 2012-02-03
  • 2013-12-09
  • 1970-01-01
相关资源
最近更新 更多