1

我在 MSBuild 脚本中使用SvnInfo 任务:

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

$(Sources)仅包含源文件。

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

实际上,我想在修订号更改时运行 SvnInfo,但在修订号与上次运行相同时不运行 Target(使用增量构建)。

如何在目标中正确指定输入(标签中的属性InputsTarget包含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文件夹是否被修改。

4

1 回答 1

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到 aTarget并根据 property 运行它$(RevisionWasChanged)

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

您还可以使用<Choose>以下功能来控制构建脚本执行流程:

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

让我知道它是否适合你。

于 2011-08-16T11:31:57.000 回答