MSBuild SvnInfo - 目标输入是否正确?

时间:2011-08-16 11:22:18

标签: svn msbuild msbuildcommunitytasks msbuild-target

我在MSBuild脚本中使用SvnInfo task

<SvnInfo LocalPath="$(Sources)">
  <Output TaskParameter="Revision" PropertyName="Revision" />
</SvnInfo>

$(Sources)仅包含源文件。

显然SvnInfo取决于$(Sources)中的文件。 然后,Target使用info生成带有修订号的输出文件。

实际上,我希望在修订版本号更改时运行SvnInfo,但是当版本号与上一次运行时相同时,不要运行Target(使用增量版本)。

如何正确指定目标中的输入(Inputs标记中的属性Target,其中包含SvnInfo任务的调用?

我是用以下方式制作的:

<ItemGroup>
  <Target1Inputs Include="$(Sources)\**" />
</ItemGroup>

<Target Name="Target1" Inputs="@(Target1Inputs)" Outputs="...">
  ...
  <!-- SvnInfo call here -->
  <!-- File with revision number is created here -->

</Target>

在我看来它的解决方法,因为理想情况下我应该知道哪些文件SvnInfo不依赖于猜测。是否有可能获得此类信息?

我也不知道是否修改了.svn个文件夹。

1 个答案:

答案 0 :(得分:0)

基本上就是这样:

<PropertyGroup>
  <ExcludePdbs>$(YourOutputPath)\**\*.pdb</ExcludePdbs>
  <ExcludeTmp>$(YourOutputPath)\**\*tmp*</ExcludeTmp>
</PropertyGroup>

<!-- Prepare set of files -->
<ItemGroup>
   <Files Include="$(FilesToIncludeFolder)\**\*.*"
          Exclude="$(ExcludePdbs);$(ExcludeTmp);$(ExcludeOtherFiles);"/>
</ItemGroup>

<!-- Pass into the target -->
<Target Name="Target1" Inputs="@(Files)" Outputs="..." />

编辑:问题已更新,所以这里也是我的更新

假设您可以处理修订更改状态,您可以将Condition添加到Target并运行它取决于属性$(RevisionWasChanged)

<Target Condition="$(RevisionWasChanged)=='True'"` />

另外,为了控制构建脚本执行流程,您可以使用<Choose>功能:

<Choose>
    <When Condition="$(RevisionWasChanged)=='True'">
    </When>
    <Otherwise>
    </Otherwise>
</Choose>

让我知道它是否适合你。