你怎么递归调用任务的MSBuild?递归、你怎么、任务、MSBuild

由网友(野妓)分享简介:例如。我想打电话给这些脚本每次路过差异PARAMS:< ItemGroup>< SqlFiles包括=$(SourceServicesDbSqlRootDir)CreateScripts \ $(SourceServiceName)\表\ * SQL。/>< SqlFiles包括=$(So...

例如。我想打电话给这些脚本每次路过差异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)/>
< /目标>
 
s7 200 在子程序中调用子程序怎么不成功呀

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>

阅读全文

相关推荐

最新文章