代码之家  ›  专栏  ›  技术社区  ›  demoncodemonkey

如何在修改文本文件时强制生成过期?

  •  4
  • demoncodemonkey  · 技术社区  · 16 年前

    情景
    我的项目有一个后期构建阶段,用来运行一个批处理文件,它读取一个文本文件“version.txt”。批处理文件使用version.txt中的信息,使用 this tool .

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

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

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

    问题
    当我修改version.txt(例如增加文件版本)然后按f7时,生成不会被视为过期,因此不会执行生成后步骤,因此不会更新dll的版本。

    我真的很想将.txt文件作为构建的输入,但是没有任何实际尝试使用它的东西。

    如果我在项目中包含cpp文件中的.txt文件,编译器将失败,因为它显然不理解“@set”是什么意思。

    如果我加上/*…*/注释@set命令,批处理文件有一些语法错误,但最终成功。但我认为这是个糟糕的解决方案。

    所以…你会怎么做?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Charles Anderson    16 年前

    这在VS2005中有效。如果不使用该选项,则某些设置可能位于不同的位置或具有不同的名称。

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

        2
  •  0
  •   John    16 年前

    这可能太“老套”,但这可能奏效:

    1. 编写一个快速Perl(等)脚本来检查version.txt是否已更新。
    2. 如果文件已被修改,请让此脚本更新与项目一起编译的虚拟源文件。
    3. 将脚本作为预生成事件运行。

    这样,如果脚本看到文件已更改,它将更改另一个文件,这将强制重新生成。

    黑,但如果你在刮桶底的话,试试看。