【问题标题】:How to force prebuild script to run at each compile如何强制预构建脚本在每次编译时运行
【发布时间】:2011-09-06 02:31:49
【问题描述】:

我们目前使用 Delphi 2009 和 GIT 来开发应用程序。我们已经设置了一个预构建脚本,以使用来自 git 的信息生成版本号和构建 ID,并将其编译为项目中包含的资源。问题是这个脚本不能在常规编译中运行。这意味着其他开发人员最终可能会发现实际版本号与资源中的版本号之间存在差异(尤其是在 git 中切换分支时)。

由于我们使用我们的软件进行一些关键计算,我们希望使用此构建 ID 来重现计算并跟踪问题。

除了试图强迫我的开发人员经常按 shift-F9 之外,我如何确保预构建脚本在必要时运行(最好在每次编译时)?

杰森

更新:确实在每次编译时都会运行预构建脚本。问题是我希望在 git 中制作标签后按 F9 得到不同的结果,即使没有更改代码。

【问题讨论】:

  • 我的预构建操作在每次编译时都会运行。我无法想象为什么你的没有。
  • 嗯,当我按F9编译/运行程序时,版本信息经常是过时的。 Shift-F9 总是解决这个问题。我想我可以更严格一些,但假设预构建批次就是这样可能也是合理的...... preBUILD,因此只有在显式构建时才开始。

标签: delphi delphi-2009


【解决方案1】:

预构建操作会在每次编译之前运行。

您在评论中指出,当您按 F9 时,这些操作有时不会运行。这是有道理的,因为 F9 或 Run 仅在源被认为已更改时才调用编译。

BeforeCompile 通知插件的行为方式完全相同。您的解决方案是确保在使用 Ctrl+F9 运行之前进行编译。

【讨论】:

    【解决方案2】:

    我们通过编写一个使用 IOTAIDENotifier50 接口的自定义 IDE 插件解决了类似的问题。具体使用 BeforeCompile 方法,来测试一些需要的项目设置并生成动态版本信息(VERSIONINFO 资源)。每种类型的构建(编译和构建)都会调用它。我们还会生成一个唯一的 exe 序列号并记录所有内容,这有助于我们追踪问题,并且类似于您的脚本。为了完整起见,我们只在 Delphi 2007 和 Delphi XE 中完成了这项工作。

    【讨论】:

    • 这听起来像是我自己没有资源(时间)去做的事情。你愿意分享你的插件的一些源代码吗?
    • 虽然它不能解决您的问题,但编写这样的插件非常简单。在添加构建前和构建后操作之前,我做了与史蒂夫完全相同的操作,这真的很简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2012-10-12
    • 2016-10-08
    • 2020-01-21
    相关资源
    最近更新 更多