2015-05-01 4 views
0

Я пытаюсь создать цель MSBuild для сборки после обработки через пользовательский исполняемый файл (например, convert.exe).Преобразование разделительной строки в массив или ItemGroup

Целевая группа получает номер с запятой ; Разделяемый список ассамблей 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, чтобы я мог обрабатывать каждую сборку отдельно?

например.

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> 

ответ

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>