How do you recursively call tasks in MSBuild?

不羁岁月 提交于 2019-12-10 09:46:57

问题


E.g. I want to call these scripts passing diff params each time:

<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> 

回答1:


You could to that by using MSBuild Task with Properties.

<!-- 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>


来源:https://stackoverflow.com/questions/556449/how-do-you-recursively-call-tasks-in-msbuild

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!