是否可以根据Msbuild中的另一个目标结果执行目标?

时间:2015-01-06 09:16:36

标签: msbuild clearcase msbuild-4.0

我正在查找clearcase文件夹是否有任何更改。

<Target Name="CheckChanges" Returns="ItemsFromFile">

    <Exec Command="cleartool find &quot;$(FolderPath)&quot; -version &quot;{brtype($(StreamName)) &amp;&amp; created_since($(FromDate))}&quot; -print >> Changes.log" />

    <ReadLinesFromFile
             File="Changes.log" >
      <Output
          TaskParameter="Lines"
          ItemName="ItemsFromFile"/>
    </ReadLinesFromFile>


  </Target>

<Target Name="Build"> 

<!-- This target should be executed only when Changes.log file has contents -->

<Target>

如果$(FolderPath)有变化,那么内容将在Changes.log中提供。

我想要做的是如果changes.log文件包含一些行,那么运行另一个任务Build应该运行。

如何根据文件中包含内容的条件执行目标?

1 个答案:

答案 0 :(得分:1)

  

我想要做的是,如果changes.log文件包含一些行,那么运行另一个任务Build应该运行。

问题是,您正在使用&{39; cleartool find&#39;重定向>>的结果。

首次执行该作业将初始化Changes.log文件,您可以设置另一个作业来测试该文件是否存在(请参阅MSBuild conditions),其大小为非零,以便跑。 (有点像&#34; verify the existence of a folder using the msbuild extension pack?&#34;)

但是第二次执行只会添加行(如果有更改),或保持Changes.log文件不变。
这意味着&#34; Changes.log&#34;仍然会有内容&#34;即使cleartool find没有找到任何更改。

使用&#39; >&#39;而不是&#39; >>&#39;可以解决这个问题,因为如果Changes.log没有检测到任何更改,它会生成一个空的cleartool find文件,或者如果检测到更改则生成一个非空的文件。