0

I'm trying to create a MSBuild target to post-process assemblies through a custom executable (e.g. convert.exe).

The target receives a semi-colon ; separated list of assemblies as Input and I would like to batch 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>

The Exec command outputs, echo Assembly1.dll;Assembly2.dll;Assembly3.dll;.

How do I transform the Input so that I can process each assembly individually?

e.g.

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

So far I have tried:

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

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

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

</Target>
Dennis
  • 20,275
  • 4
  • 64
  • 80

1 Answers1

0

Answering my own question. MSBuild already had a way of batching the items (as I thought!).

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

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

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

  <Error Text="Stop" />

</Target>
Dennis
  • 20,275
  • 4
  • 64
  • 80