2009-02-17 36 views
3

例如我想打電話給這些腳本通過差異PARAMS每次:使用MSBuild任務屬性你如何在MSBuild中遞歸調用任務?

<ItemGroup> 
     <SqlFiles Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\Tables\*.sql" /> 
     <SqlFiles Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\Functions\*.sql" /> 
     <SqlFiles Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\Views\*.sql" /> 
     <SqlFiles Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\ForeignKeys\*.sql" /> 
     <SqlFiles Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\StoredProcedures\*.sql" /> 
     <SqlFiles Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\Data\*.sql" /> 
</ItemGroup> 

回答

2

,你可以到。

<!-- Dont itemize sql files now, if you want to differenciate the task operations --> 
<ItemGroup> 
    <SqlDirs Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\Tables" /> 
    <SqlDirs Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\Functions" /> 
    <SqlDirs Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\Views" /> 
    <SqlDirs Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\ForeignKeys" /> 
    <SqlDirs Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\StoredProcedures" /> 
    <SqlDirs Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\Data" /> 
</ItemGroup> 


<Target Name="MainTask"> 
    <MSBuild Projects="$(MSBuildProjectFile)" 
      Properties="SqlDir=%(SqlDirs.Fullpath)" 
      Targets="RecursivelyCalledTask"> 
    <Output ItemName="ProjSources" TaskParameter="TargetOutputs"/> 
    </MSBuild> 
</Target> 

<Target Name="RecursivelyCalledTask"> 
    <!-- We create here the SqlFiles items based on SqlDir--> 
    <CreateItem Include="$(SqlDir)\*.sql"> 
    <Output ItemName="SqlFiles" TaskParameter="Include"/> 
    </CreateItem> 

    <Message Text="SqlFiles -> @(SqlFiles)"/> 
</Target>