你怎么递归调用任务的MSBuild? [英] How do you recursively call tasks in MSBuild?
本文介绍了你怎么递归调用任务的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)
目标=RecursivelyCalledTask>
<输出=了itemnameProjSourcesTaskParameter =TargetOutputs/>
< /的MSBuild>
< /目标>
<目标名称=RecursivelyCalledTask>
<! - 在这里,我们创建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屋!
查看全文