MSBuild kopieren Aufgabe nicht das Kopieren von Dateien in der ersten Runde
-
03-07-2019 - |
Frage
Ich habe eine build.proj Datei, die eine Aufgabe besteht Dateien zu kopieren, die generiert werden, nachdem die Build abgeschlossen ist. Das Problem ist, dass diese Dateien nicht beim ersten Mal kopiert und ich habe msbuild wieder auf dem build.proj laufen, so dass die Dateien kopiert werden können. Bitte kann mir jemand sagen, was ist falsch mit der folgenden build.proj-Datei:
<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>
Lösung
Die itemgroups ausgewertet werden, wenn das Skript analysiert wird. Zu dieser Zeit sind die Dateien noch nicht da. Um die Dateien zu finden, werden Sie die ItemGroup innerhalb eines Ziel füllen müssen.
<!-- SQL Scripts which are needed for deployment -->
<Target Name="BeforeCopySqlScripts">
<CreateItem Include="$(SolutionRoot)\04\**\Databases\**\*.sql">
<Output ItemName="CopySqlScript" TaskParameter="Include"/>
</CreateItem>
</Target>
In diesem Beispiel wird die ItemGroup des Namen "CopySqlScript" mit dem Ausdruck in dem Include-Attribute.
Edit:
Jetzt kann ich das Skript gelesen: den CreateItem Tag in Ihrem CopyToBuildFolder Ziel hinzufügen