2014-11-07 3 views
1

У меня есть MSBuild ItemGroup, и я хотел был бы иметь возможность echo его в «Послестроить событие».echo Все элементы ItemGroup

Однако, когда я пытаюсь команды, как: echo My ItemGroup: @(Foo)

Я получаю ошибку:

error MSB4164: The value "echo My ItemGroup: @(Foo)" of metadata "Command" contains an item list expression. Item list expressions are not allowed on default metadata values.

Я не очень хорошо с ItemGroup с до сих пор. Есть ли способ, которым я могу только echo список файлов, которые содержит Foo?

+0

Вы можете оставить немного больше кода, который вы пытаетесь использовать? Что-то, что включает теги ItemGroup и теги Target того, что вы пытаетесь сделать, поможет мне лучше понять вашу проблему. И затем, пожалуйста, ответьте на мой комментарий, чтобы получить уведомление о том, что вопрос был обновлен :) –

+0

@ ZainRizvi Итак, для 'ItemGroup'' Foo' содержится «a.txt; b.txt; c.txt». Я бы как «echo':« My ItemGroup: a.txt; b.txt; c.txt » –

ответ

1

Вы хотите что-то вроде:

<ItemGroup> 
    <ForcedUsingFilesList Include="c:\path\to\files\*" /> 
</ItemGroup> 
<Target Name="MyTarget"> 
    <PropertyGroup> 
    <MyFiles> 
     @(ForcedUsingFilesList->'%(FullPath)') 
    </MyFiles> 
    </PropertyGroup> 
    <Exec>echo $(MyFiles)</Exec> 
</Target> 
2

Попробуйте вместо %(Foo.Identity). Это напечатает только один элемент из списка, но вызовет задание, содержащее его (Exec, я полагаю), чтобы перебрать элементы.

Если это не сработает, обязательно работайте с XML-файлом напрямую, а не с IDE, в случае, если он ускользнет от вещей или добавит другой код, который мы не видим.

(позже) Это может быть как this post, где они плачут, это не просто и требует прямого редактирования XML в любом случае. Поэтому просто измените его на задачу Exec, где выражение itemlist появляется в атрибуте, а не в определении метаданных.

написано, что PostBuildEvent является больше обратной совместимостью вещи, и хороший, чтобы использовать это AfterBuild цели, что «может содержать любые задачи MSBuild, в том числе один руды более Exec задач ... это не иметь пользовательский интерфейс в среде IDE ... редактировать его как XML ... »Совет 43 в книге Брайана Кретцлера.

+0

Это ничего не значит« эхо ». В .vcxproj 'echo' представлены следующим образом: ' echo My ItemGroup: @ (Foo)' Потому что это не в атрибуте XML, я не верю, что «%» вызовет цикл. –

+0

@JonathanMee Я отредактировал вопрос. Это помогает увидеть реальные команды сборки, а не только действия IDE, которые были использованы! –

+0

Я на самом деле _am_ используя событие 'AfterBuild'. «Echo», который я пытаюсь написать в «PostBuildEvent», - это просто рассказать всем моим сотрудникам, которые используют «PostBuildEvent»: «Эй, я копирую эти файлы сюда с целью« AfterBuild ». –