2009-04-14 7 views
1

je la tâche suivante qui, en raison de la combinaison de DestinationFiles et DestionationFolder ne fonctionne pas, mais il saisit le concept de ce que je veux faire:MSBuild récursive avec copie% (ConfigurationToBuild.PlatformToBuild)

<CreateItem Include="$(Destination)\**\*.Generated.*.*"> 
    <Output TaskParameter="Include" ItemName="GeneratedFiles" /> 
</CreateItem> 

<Copy Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='Debug-All' Or '%(ConfigurationToBuild.FlavorToBuild)'=='Release-WebService' " 
     SourceFiles="@(GeneratedFiles)" 
     DestinationFiles="@(GeneratedFiles-&gt;'%(RecursiveDir)%(Filename)%(Extension)')" 
     DestinationFolder="$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)" 
/> 

J'ai donc un ensemble de fichiers (données, pas de code) qui sont générés, et ceux-ci doivent être copiés à l'emplacement final des binaires.

Dans cette version, je crée 3 configurations à la fois: une version Debug-All, une version Release-Client et un Release-WebService. Les raisons sont de conserver le même numéro de build et la même base de code, tout en publiant les projets Client et WebService puis en les récupérant dans les projets d'installation.

Si j'essaie d'utiliser: DestinationFiles = "@ (GeneratedFiles- > « $ (BinariesRoot) \% (ConfigurationToBuild.PlatformToBuild) \% (ConfigurationToBuild.FlavorToBuild) \% (RecursiveDir)% (Nom du fichier)% (Extension) ') "

MSBuild génère une erreur dans la partie% (ConfigurationToBuild.FlavorToBuild).

Répondre

0

J'ai trouvé une solution de contournement pour ce problème: c'est-à-dire dupliquer les commandes manuellement. Donc, il est moins générique et produit encore plus de bruit dans le fichier buildlog, mais au moins cela fonctionne!

<!-- Copy the updated files to the Binariesroot to have them picked up by the Setups --> 
<CreateItem Include="$(Destination)\**\*.Generated.*.sql"> 
    <Output TaskParameter="Include" ItemName="GeneratedSqlFiles" /> 
</CreateItem> 
<Message Text="[email protected](GeneratedSqlFiles)->RecursiveDir=%(RecursiveDir) Filename=%(Filename)%(Extension)" /> 

<CreateProperty Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='Debug'" 
       Value="$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)" > 
    <Output TaskParameter="Value" PropertyName="RealBinariesRoot" /> 
</CreateProperty> 
<Copy Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='Debug'" 
     SourceFiles="@(GeneratedSqlFiles)" 
     DestinationFiles="@(GeneratedSqlFiles->'$(RealBinariesRoot)\Deployment\%(RecursiveDir)%(Filename)%(Extension)')" 
/> 
<CreateProperty Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='WebService'" 
      Value="$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)" > 
    <Output TaskParameter="Value" PropertyName="RealBinariesRoot" /> 
</CreateProperty> 
<Copy Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='WebService'" 
     SourceFiles="@(GeneratedSqlFiles)" 
     DestinationFiles="@(GeneratedSqlFiles->'$(RealBinariesRoot)\Deployment\%(RecursiveDir)%(Filename)%(Extension)')" 
/> 

Egalement trouvé en attendant que si vous avez un '.' Dans le chemin Include d'une tâche CreateItem, la propriété RecursiveDir n'est plus renseignée. Donc, ayant

'lecteur: \ somefolder \ sous-dossier \ Sources \ Generated ***. Généré. *. sql' fournira le% (RecursiveDir) métadonnées. En utilisant

'lecteur:. \ Somefolder \ sous-répertoire \ \ Sources \ generated *** * sql générés...', Ce qui résout le même chemin que ci-dessus sera PAS fournir les métadonnées% (RecursiveDir). (notez le subtil '.' entre le sous-dossier et les sources)

Bien entendu (loi de Murphy) nous utilisons ceci pour spécifier quelle branche doit être construite, avec. pointant vers la branche principale ;-)

Questions connexes