2011-06-01 92 views
5

我们目前使用Delphi 2009和GIT开发应用程序。我们已经建立了一个预生成脚本,使用git中的信息生成版本号和构建ID,并将其编译为项目中包含的资源。问题是这个脚本不能在常规编译中运行。这意味着其他开发人员最终会在实际版本号和资源中的数字之间出现差异(特别是在git中切换分支时)。如何强制预编译脚本在每次编译时运行

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

除了试图迫使我的开发人员经常按shift-F9,我怎么能确保prebuild脚本在必要时运行(最好在每次编译时)呢?

杰森

UPDATE:即预生成脚本得到在每个编译运行这是真的。问题在于,我希望在git中创建标签后按F9得到不同的结果,即使代码没有改变。

+0

我的预生成操作在每次编译时运行。我无法想象你为什么不这样做。 – 2011-06-01 12:17:49

+0

那么,当我按F9编译/运行程序时,版本信息通常是过期的。 Shift-F9总是解决这个问题。我想我可能会更加严格,但假设prebuild批处理就是preBUILD,因此只有在明确构建时才会启动。 – boileau 2011-06-01 20:58:22

回答

0

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

您在评论中声明,按F9时有时不会运行这些操作。这是有道理的,因为如果源被认为已经改变,F9或Run只调用一个编译。

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

3

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

+0

这听起来像是我没有资源(时间)来做我自己的事情。你愿意分享你的插件的一些源代码吗? – boileau 2011-06-01 20:55:34

+0

尽管它不能解决您的问题,但编写这样的插件非常简单。在添加前期和后期构建操作之前,我做的和史蒂夫完全一样,它确实很简单。 – 2011-06-01 21:18:00