Comment dois-je effectuer le EXEC tâche dans une “boucle” avec MSBuild ItemGroups?
Comment dois-je effectuer le EXEC tâche dans une "boucle" avec MSBuild ItemGroups?
Au lieu de répéter cette commande, comme suit:
<Exec ContinueOnError="false" Command="sqlcmd -S $(ServerName) $(SqlServerUser) -d $(DbName) -v TableName=%22account%22 -i data\add_sql_cache.sql -b" />
<Exec ContinueOnError="false" Command="sqlcmd -S $(ServerName) $(SqlServerUser) -d $(DbName) -v TableName=%22services%22 -i data\add_sql_cache.sql -b" />
<Exec ContinueOnError="false" Command="sqlcmd -S $(ServerName) $(SqlServerUser) -d $(DbName) -v TableName=%22servicesGroup%22 -i data\add_sql_cache.sql -b" />
<Exec ContinueOnError="false" Command="sqlcmd -S $(ServerName) $(SqlServerUser) -d $(DbName) -v TableName=%22servicesCategory%22 -i data\add_sql_cache.sql -b" />
Je serais plutôt de définir un ItemGroup et exécuter simplement une "boucle". J'ai la ItemGroup bas:
<ItemGroup>
<CachedTables Include="account" />
<CachedTables Include="services" />
<CachedTables Include="servicesGroup" />
<CachedTables Include="servicesCategory" />
Mais en raison de MSBuild est étonnamment peu intuitive de la syntaxe, je n'ai aucune idée de la façon d'effectuer le Exec tâche dans une boucle avec le ItemGroup ci-dessus comme une entrée.
- Ma réponse à cette question a été supprimé, mais je tiens à préciser que mon expérience depuis la rédaction de cette question a conduit à me sentir assez fortement que c'est une mauvaise idée: vous devez utiliser un outil comme Psake ou gulp à faire des choses comme ça.
Vous devez vous connecter pour publier un commentaire.
Il y a deux façons de le faire, les deux sont des formes de "traitement par lots"
Vous pouvez le lot d'une cible et d'effectuer l'Exec et d'autres opérations,
L'autre est d'utiliser la tâche de traitement par lots, juste sur le Exec tâche. Il est similaire,
La différence est de savoir comment les exploiter. Avec le premier, car le traitement par lots est pour l'ensemble de la cible (réalisé avec les Sorties de l'attribut), Exec, puis le SomeOtherTask seront exécutés pour chaque élément du groupe. En d'autres termes,
Les options de seconde, le dosage de chaque tâche séparément, serait de produire la séquence suivante,
Si je comprends bien la question, il peut être fait un peu plus simplement. L'exemple suivant utilise <Exec/> à l'écho de chaque élément dans un <ItemGroup/>