Задача MSBuild Copy не копировать файлы в первый раз

Я создал файл build.proj, который состоит из задачи скопировать файлы, которые будут сгенерированы после завершения сборки. Проблема в том, что эти файлы не копируются в первый раз, и мне нужно снова запустить msbuild в файле build.proj, чтобы файлы могли быть скопированы. Пожалуйста, кто-нибудь скажет мне, что случилось со следующим файлом build.proj:

<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>

<SourcePath Condition="'$(SourcePath)' == ''">$(MSBuildProjectDirectory)</SourcePath> 

<BuildDir>$(SourcePath)\build</BuildDir>

</PropertyGroup> 

<ItemGroup> 
    <Projects 
       Include="$(SourcePath)\src\myApp\application.csproj">  
    </Projects> 
</ItemGroup> 

<Target Name="Build">
   <Message text = "Building project" />    
   <MSBuild   
     Projects="@(Projects)" 
     Properties="Configuration=$(Configuration)" /> 
</Target>

<ItemGroup>
   <OutputFiles Include ="$(MSBuildProjectDirectory)\**\**\bin\Debug\*.*"/>
</ItemGroup>

<Target Name="CopyToBuildFolder">
   <Message text = "Copying build items" />
   <Copy SourceFiles="@(OutputFiles)" DestinationFolder="$(BuildDir)"/>
</Target>

<Target Name="All"
   DependsOnTargets="Build; CopyToBuildFolder"/>

</Project> 

Ответ 1

Группы элементов оцениваются при анализе script. В то время ваши файлы еще нет. Чтобы иметь возможность находить файлы, вам нужно будет заполнить группу элементов из цели.

  <!-- SQL Scripts which are needed for deployment -->
  <Target Name="BeforeCopySqlScripts">
    <CreateItem Include="$(SolutionRoot)\04\**\Databases\**\*.sql">
      <Output ItemName="CopySqlScript" TaskParameter="Include"/>
    </CreateItem>
  </Target>

В этом примере создается ItemGroup с именем "CopySqlScript", используя выражение в атрибуте Include.

Edit:

Теперь я могу прочитать ваш script: добавить тег CreateItem в целевой объект CopyToBuildFolder