你怎么递归调用任务的MSBuild? [英] How do you recursively call tasks in MSBuild?

查看:176
本文介绍了你怎么递归调用任务的MSBuild?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如。我想打电话给这些脚本每次路过差异PARAMS:

 < ItemGroup>
        < SqlFiles包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\表\ * SQL。/>
        < SqlFiles包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\功能\ * SQL。/>
        < SqlFiles包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\意见\ * SQL。/>
        < SqlFiles包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\ ForeignKeys \ * SQL。/>
        < SqlFiles包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\ StoredProcedures \ * SQL。/>
        < SqlFiles包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\ DATA \ * SQL。/>
< / ItemGroup>
 

解决方案

您可以到使用的 MSBuild任务属性的。

 <! - 不要逐项SQL文件现在,如果你想者区分任务操作 - >
< ItemGroup>
  < SqlDirs包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\表/>
  < SqlDirs包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\功能/>
  < SqlDirs包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\查看/>
  < SqlDirs包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\ ForeignKeys/>
  < SqlDirs包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\ StoredProcedures/>
  < SqlDirs包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\数据/>
< / ItemGroup>


<目标名称=MainTask的>
  &所述; MSBuild的项目=$(MSBuildProjectFile)
           属性=SqlDir =%(SqlDirs.Fullpath)
           目标=RecursivelyC​​alledTask>
    <输出=了itemnameProjSourcesTaskParameter =TargetOutputs/>
  < /的MSBuild>
< /目标>

<目标名称=RecursivelyC​​alledTask>
  <! - 在这里,我们创建SqlFiles项目的基础上SqlDir  - >
  < createItem中包括=$(SqlDir)\ * SQL。>
    <输出=了itemnameSqlFilesTaskParameter =包含/>
  < / createItem中>

  <消息文本=SqlFiles  - > @(SqlFiles)/>
< /目标>
 

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>

解决方案

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>

这篇关于你怎么递归调用任务的MSBuild?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆