2009-03-03 6 views
11

J'ai créé un fichier build.proj qui consiste en une tâche pour 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 je dois à nouveau exécuter msbuild sur le build.proj afin que les fichiers puissent être copiés. S'il vous plaît quelqu'un peut me dire ce qui est erroné avec le fichier build.proj suivant:MSBuild Tâche de copie ne copiant pas les fichiers la première fois

<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

Fixer l'empreinte de votre code s'il vous plaît, ce n'est pas compréhensible. –

+0

Désolé eu un peu de problème en insérant le script ... Tout est trié maintenant – Draco

Répondre

21

Les itemgroups sont évaluées lorsque le script est analysé. A ce moment vos fichiers ne sont pas encore là. Pour pouvoir trouver les fichiers, vous devez remplir le groupe d'articles à 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 d'éléments nommé "CopySqlScript" à l'aide de l'expression de l'attribut Include.

Edit:

Maintenant, je peux lire votre script: ajouter la balise CreateItem au sein de votre cible CopyToBuildFolder

+0

Cela fonctionne parfaitement ... merci :) – Draco

+0

NP, il m'a fallu un certain temps pour comprendre cela aussi. – thijs

+0

Juste ce que je cherchais, thx Draco & thijs – GvS

Questions connexes