当修改文本文件时,如何强制构建过时?

时间:2009-09-04 16:16:16

标签: visual-studio visual-studio-2008 batch-file dependencies versioning

情景
我的项目有一个后期构建阶段,用于运行批处理文件,该文件读取文本文件“version.txt”。批处理文件使用version.txt中的信息使用this tool为DLL注入版本块。

version.txt包含在我的项目中,以便于修改。看起来有点像这样:

@set #Description="TankFace Utility Library"
@set #FileVersion="0.1.2.0"
@set #Comments=""

基本上批处理文件将此文件重命名为version.bat,调用它,然后将其重命名为version.txt。

问题
当我修改version.txt(例如增加文件版本),然后按F7时,构建不会被视为过时,因此不会执行构建后的步骤,因此DLL的版本不会得到更新。

我真的想将.txt文件作为构建的输入包含在内,但实际上并没有尝试使用它。

如果我#include项目中CPP文件中的.txt文件,编译器会失败,因为它显然不理解“@set”的含义。

如果我在@set命令周围添加/ * ... * / comments,那么批处理文件会有一些语法错误,但最终会成功。但我认为这是一个糟糕的解决方案。

所以......你会怎么做?

2 个答案:

答案 0 :(得分:1)

这适用于VS2005。如果您不使用它,某些设置可能位于不同的位置或使用不同的名称。

将文本文件添加到项目中,在解决方案资源管理器中右键单击它,然后选择“属性”。在配置属性>下一般确保文件未从构建中排除。在自定义构建步骤>下常规,将现有的post-build命令作为命令行设置。确保将.txt文件指定为输出文件。现在F7应该发现对文本文件的更改并运行批处理文件。

答案 1 :(得分:0)

这可能过于“hacky”但这可能有效:

  1. 编写一个快速的Perl(等)脚本来检查version.txt是否已更新。
  2. 如果文件已被修改,请让此脚本更新使用您的项目编译的虚拟源文件。
  3. 将脚本作为预构建事件运行。
  4. 这样,如果脚本看到文件已经更改,它将更改另一个文件,这将强制重新构建。

    Hacky,但是如果你正在刮掉枪管的底部,那就试试吧。