La tâche MSBuild Copy ne copie pas les fichiers la première fois
-
03-07-2019 - |
Question
J'ai créé un fichier build.proj qui consiste en une tâche permettant de copier les fichiers qui seront générés une fois la génération terminée. Le problème est que ces fichiers ne sont pas copiés la première fois et que je dois réexécuter msbuild sur le build.proj pour que les fichiers puissent être copiés. Quelqu'un peut-il me dire ce qui ne va pas avec le fichier build.proj suivant:
<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>
La solution
Les groupes d'éléments sont évalués lors de l'analyse du script. À ce moment-là, vos fichiers ne sont pas encore là. Pour pouvoir trouver les fichiers, vous devez renseigner le groupe d'éléments à partir d'une cible.
<!-- SQL Scripts which are needed for deployment -->
<Target Name="BeforeCopySqlScripts">
<CreateItem Include="$(SolutionRoot)\04\**\Databases\**\*.sql">
<Output ItemName="CopySqlScript" TaskParameter="Include"/>
</CreateItem>
</Target>
Cet exemple crée le groupe de tâches nommé "CopySqlScript". en utilisant l'expression dans l'attribut Inclure.
Modifier:
Je peux maintenant lire votre script: ajoutez la balise CreateItem dans votre cible CopyToBuildFolder