2011-08-16 44 views
1

我的MSBuild腳本中使用SvnInfo taskMSBuild SvnInfo - 哪些目標輸入正確?

<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

所以你問怎麼填寫「@(Target1Inputs)」的文件或你是什麼意思? – sll

+0

@sllev我在問什麼在Target標籤的Input屬性中指定。我提出了我的變體,但我不確定。 (更新後的問題) – sergtk

+0

查看我的答案,如果您的意思是別的,請讓我知道 – sll

回答

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="..." /> 

編輯:此問題已使這裏更新我的更新以及

假如你能處理的修訂改變了狀態,你可以添加ConditionTarget並運行它取決於屬性$(RevisionWasChanged)

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

還要控制構建腳本的執行流程,你可以使用<Choose>功能:

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

讓我知道它是否適合你。

+0

當使用不正確的輸入運行我的任務時,可以更新源,但由於增量構建目標未執行。事實上,我想在版本號更改時運行SvnInfo,但在版本號相同時不運行Target(使用增量版本)。在包含屬性中,我指定的文件夾僅包含源。 – sergtk

+1

@sergdev:你必須將這些細節添加到答案中,因爲它們很重要 – sll

+0

事實上,計算'$(RevisionWasChanged)'的簡單方法是我的問題可能的答案之一。 – sergtk