如何在“执行”中执行EXEC任务;“循环”;是否使用MSBuild项组?
如何使用MSBuild ItemGroups在“循环”中执行EXEC任务 不要像这样一遍又一遍地重复此命令:如何在“执行”中执行EXEC任务;“循环”;是否使用MSBuild项组?,msbuild,Msbuild,如何使用MSBuild ItemGroups在“循环”中执行EXEC任务 不要像这样一遍又一遍地重复此命令: <Exec ContinueOnError="false" Command="sqlcmd -S $(ServerName) $(SqlServerUser) -d $(DbName) -v TableName=%22account%22 -i data\add_sql_cache.sql -b" /> <Exec ContinueOnError="fa
<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" />
我宁愿定义一个ItemGroup,只执行一个“循环”。我已经搞定了项目组:
<ItemGroup>
<CachedTables Include="account" />
<CachedTables Include="services" />
<CachedTables Include="servicesGroup" />
<CachedTables Include="servicesCategory" />
但是由于MSBuild的语法非常不直观,我不知道如何在循环中以上面的ItemGroup作为输入来执行Exec任务。有两种方法可以做到这一点,都是“批处理”的形式 您可以批处理目标并执行Exec和其他操作
<Target Name="ExecMany"
Outputs="%(CachedTables.Identity)">
<Exec
Command="sqlcmd -S ... TableName=%22%(CachedTables.Identity)%22 -i ..."
/>
<SomeOtherTask ThatUses="%(CachedTables.Identity)" />
</Target>
第二个选项分别对每个任务进行批处理,将产生以下顺序:
Exec with "account"
Exec with "services"
...
SomeOtherTask with "account"
SomeOtherTask with "services"
...
如果我理解这个问题,可以做得简单一点。以下示例使用在
<ItemGroup>
<MySpecialItem Include="one" />
<MySpecialItem Include="two" />
<MySpecialItem Include="three" />
</ItemGroup>
<Target Name="MyTarget">
<Exec Command="echo %(MySpecialItem.Identity)"/>
</Target>
以下是相关的MSDN链接,我是在阅读了Brian的答案后才找到的:,并且。我对此的答案已被删除,但是我想记录在案的是,我写这个问题以来的经历让我强烈地感觉到这是个坏主意:你应该使用Psake或gulp这样的工具来做这样的事情。如果你不知道MySpecialItem是什么,例如,MySpecialItem将是一个多行变量的内容,你会怎么做
Exec with "account"
Exec with "services"
...
SomeOtherTask with "account"
SomeOtherTask with "services"
...
<ItemGroup>
<MySpecialItem Include="one" />
<MySpecialItem Include="two" />
<MySpecialItem Include="three" />
</ItemGroup>
<Target Name="MyTarget">
<Exec Command="echo %(MySpecialItem.Identity)"/>
</Target>