将分隔的字符串转换为数组或ItemGroup

时间:2015-05-01 05:58:04

标签: msbuild msbuild-task

我正在尝试创建一个MSBuild目标,以通过自定义可执行文件(例如convert.exe)对进程进行处理。

目标会收到一个分号;分隔的程序集列表为Input,我想批量Exec

<Target Name="_CollectAssemblies" DependsOnTargets="ResolveReferences">
    <ItemGroup>
        <_Assemblies Include="@(ReferencePath);@(CopyLocalFiles);@(ResolvedDependencyFiles);@(ReferenceDependencyPaths);$(TargetPath)" />
    </ItemGroup>
</Target>

<Target Name="_ConvertFiles" DependsOnTargets="_CollectAssemblies"
                Inputs="@(_Assemblies)">

    <Exec Command="echo @(_Assemblies)" />
    <!--<Exec Command="$(MSBuildThisFileDirectory)convert.exe @(_Assemblies)" />-->

</Target>

Exec命令输出echo Assembly1.dll;Assembly2.dll;Assembly3.dll;

如何转换Input以便我可以单独处理每个程序集?

e.g。

echo Assembly1.dll
echo Assembly2.dll
echo Assembly3.dll

到目前为止,我已经尝试过:

<Target Name="_ConvertFiles" DependsOnTargets="_CollectAssemblies"
                Inputs="@(_Assemblies)">

    <ItemGroup>
        <_SplitAssemblies Include="$(_Assemblies.Split(';'))" />
    </ItemGroup>

    <Exec Command="echo %(_SplitAssemblies.Identity)" />

</Target>

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。 MSBuild已经有了一种批处理项目的方式(正如我想的那样!)。

<Target Name="_ConvertFiles" DependsOnTargets="_CollectAssemblies"
                Inputs="@(_Assemblies)">

  <ItemGroup>
      <_ConvertAssemblies Include="@(_Assemblies)"/>
  </ItemGroup>

  <Exec Command="$(MSBuildThisFileDirectory)convert.exe %(_ConvertAssemblies.Identity)" />

  <Error Text="Stop" />

</Target>