【问题标题】:How do you recursively call tasks in MSBuild?如何递归调用 MSBuild 中的任务?
【发布时间】:2009-02-17 11:48:56
【问题描述】:

例如我想每次都调用这些脚本传递差异参数:

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

【问题讨论】:

    标签: .net msbuild build-process msbuild-task


    【解决方案1】:

    您可以通过使用带有 PropertiesMSBuild Task

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-20
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      相关资源
      最近更新 更多