如何在“;环路”;是否使用MSBuild项组?

如何在“;环路”;是否使用MSBuild项组?,msbuild,Msbuild,如何使用MSBuild ItemGroups在“循环”中执行CallTarget任务 我有一个以分号分隔的值的属性,我想为每个值调用一次target 目前,我已检查,msbuild正在自动拆分为Itemgroup中的多个项: <ItemGroup> <Version Include="$(Versions)" /> </ItemGroup> 然而,我在CallTarget任务中没有看到任何可能的属性 很遗憾,我无法将要运行的目标迁移到C#或power

如何使用MSBuild ItemGroups在“循环”中执行CallTarget任务

我有一个以分号分隔的值的属性,我想为每个值调用一次target

目前,我已检查,msbuild正在自动拆分为Itemgroup中的多个项:

<ItemGroup>
    <Version Include="$(Versions)" />
</ItemGroup>
然而,我在CallTarget任务中没有看到任何可能的属性


很遗憾,我无法将要运行的目标迁移到C#或powershell。

msbuild中的目标每次调用只执行一次。如果一个目标已经运行,那么额外的
任务不会执行任何操作-就像多个目标依赖于一个共享目标一样

虽然可以通过定义特定于元数据的
输入
输出
来使用,但对于不表示磁盘上项目的项目,这实际上不起作用

使用不同输入执行相同逻辑的方法是使用
任务执行“内部”构建,该构建使用不同参数执行同一目标的多个构建:

<ItemGroup>
  <Version Include="1;2;3" />
</ItemGroup>
<MSBuild Projects="$(MSBuildProjectFile)" Targets="DoSthWithVersion" Properties="Version=%(Version.Identity)" />
…

<Target Name="DoSthWithVersion">
  <Message Importance="high" Text="Version is: $(Version)" />
</Target>
请注意,您还需要传递在生成过程中生成/更改的任何其他属性,这些属性不是项目文件静态属性定义的一部分(即,仅在目标内部设置)

<ItemGroup>
  <Version Include="1;2;3" />
</ItemGroup>
<MSBuild Projects="$(MSBuildProjectFile)" Targets="DoSthWithVersion" Properties="Version=%(Version.Identity)" />
…

<Target Name="DoSthWithVersion">
  <Message Importance="high" Text="Version is: $(Version)" />
</Target>