Pergunta

Eu criei um arquivo build.proj que consiste em uma tarefa para copiar arquivos que serão gerados após a construção é completa. O problema é que esses arquivos não são copiados da primeira vez e eu tenho que correr msbuild novamente no build.proj para que os arquivos podem ser copiados. Por favor, alguém pode me dizer o que está errado com o seguinte arquivo 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> 
Foi útil?

Solução

Os itemgroups são avaliadas quando o script é analisado. Naquela época, seus arquivos não estão lá ainda. Para ser capaz de encontrar os arquivos que você terá que preencher o ItemGroup de dentro de um alvo.

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

Este exemplo cria o ItemGroup chamado "CopySqlScript", usando a expressão no atributo Incluir.

Editar:

Agora posso ler seu script: adicionar a tag CreateItem dentro do seu alvo CopyToBuildFolder

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top