.net 如何在MSBuild中递归调用任务?
例如,我希望每次调用这些传递diff参数的脚本:.net 如何在MSBuild中递归调用任务?,.net,msbuild,build-process,msbuild-task,.net,Msbuild,Build Process,Msbuild Task,例如,我希望每次调用这些传递diff参数的脚本: <ItemGroup> <SqlFiles Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceName)\Tables\*.sql" /> <SqlFiles Include="$(SourceServicesDbSqlRootDir)CreateScripts\$(SourceServiceNam
<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>
您可以通过使用带有属性的MSBuild任务来实现这一点
<!-- 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>