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

StackOverflow https://stackoverflow.com/questions/606605

  •  03-07-2019
  •  | 
  •  

Вопрос

Я создал файл 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> 
Это было полезно?

Решение

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

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

Редактировать:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top