我在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
个文件夹。
答案 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>
让我知道它是否适合你。