2009-03-03 9 views
11

Creé un archivo build.proj que consiste en una tarea para copiar los archivos que se generarán después de que se complete la compilación. El problema es que estos archivos no se copian la primera vez y tengo que volver a ejecutar msbuild en build.proj para poder copiar los archivos. Por favor, ¿puede alguien decirme cuál es incorrecto con el siguiente archivo build.proj:MSBuild Copiar tarea sin copiar archivos la primera vez

<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> 
+0

Fijar la sangría de su código por favor, no es comprensible. –

+0

Lo siento, tuve algunos problemas para insertar el guión ... Todo está ordenado ahora – Draco

Respuesta

21

Los itemgroups se evalúan cuando se analiza la secuencia de comandos. En ese momento, tus archivos aún no están allí. Para poder encontrar los archivos, deberá completar el grupo de elementos dentro de un objetivo.

<!-- SQL Scripts which are needed for deployment --> 
    <Target Name="BeforeCopySqlScripts"> 
    <CreateItem Include="$(SolutionRoot)\04\**\Databases\**\*.sql"> 
     <Output ItemName="CopySqlScript" TaskParameter="Include"/> 
    </CreateItem> 
    </Target> 

Este ejemplo crea el ItemGroup llamado "CopySqlScript" utilizando la expresión en el atributo Include.

Editar:

Ahora puedo leer su guión: añadir la etiqueta CreateItem dentro de su objetivo CopyToBuildFolder

+0

Esto funciona perfectamente ... gracias :) – Draco

+0

NP, me tomó un tiempo darme cuenta de esto también. – thijs

+0

Justo lo que estaba buscando, thx Draco & thijs – GvS

Cuestiones relacionadas