L'attività di copia di MSBuild non copia i file la prima volta
-
03-07-2019 - |
Domanda
Ho creato un file build.proj che consiste in un'attività per copiare i file che verranno generati al termine della compilazione. Il problema è che questi file non vengono copiati la prima volta e devo eseguire nuovamente msbuild su build.proj in modo che i file possano essere copiati. Qualcuno può dirmi cosa c'è che non va nel seguente file 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>
Soluzione
I gruppi di articoli vengono valutati quando viene analizzato lo script. In quel momento i tuoi file non sono ancora arrivati. Per poter trovare i file dovrai riempire il gruppo di elementi all'interno di una destinazione.
<!-- SQL Scripts which are needed for deployment -->
<Target Name="BeforeCopySqlScripts">
<CreateItem Include="$(SolutionRoot)\04\**\Databases\**\*.sql">
<Output ItemName="CopySqlScript" TaskParameter="Include"/>
</CreateItem>
</Target>
In questo esempio viene creato il gruppo di elementi denominato " CopySqlScript " utilizzando l'espressione nell'attributo Includi.
Modifica:
Ora posso leggere il tuo script: aggiungi il tag CreateItem nella tua destinazione CopyToBuildFolder