Задача копирования MSBuild не копирует файлы в первый раз
-
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