У меня есть цель MSBuild, которая запускает задачу Exec для нескольких элементов. Как получить код выхода для каждого из них?Как получить выходной параметр MSBuild для каждого выполнения пакетной задачи?
я могу использовать это, чтобы получить все коды выхода и работать только, если входные файлы были изменены с момента последнего запуска (т.е. дополнительных сборок):
<ItemGroup>
<TestItem Include="MyFile1" />
<TestItem Include="MyFile2" />
<TestItem Include="MyFile10" />
</ItemGroup>
<Target Name="PrepareItemTest">
<ItemGroup>
<TestItem>
<!-- The timestamp of the "done file" is used below to detect if this target has been run since the inputs have been modified. -->
<DoneFilePath>%(TestItem.RelativeDir)%(TestItem.Filename).done/DoneFilePath>
</TestItem>
</ItemGroup>
</Target>
<Target Name="ItemTest"
DependsOnTargets="PrepareItemTest"
Inputs="@(TestItem);@(OtherInputs)"
Outputs="%(TestItem.DoneFilePath)">
<Exec Command="ECHO Running on %(TestItem.Identity) |findstr 1" IgnoreExitCode="true">
<Output TaskParameter="ExitCode" PropertyName="TestExitCode"/>
</Exec>
<Error Condition=" '$(TestExitCode)' != '0' " Text="Error $TestExitCode" />
<WriteLinesToFile Condition=" '$(TestExitCode)' == '0' " File="%(TestItem.DoneFilePath)" Lines="Ran successfully on %(TestItem.Filename)%(TestItem.Extension)" />
</Target>
Выход:
Ran ItemTest. Exit code=0
Ran ItemTest. Exit code=1
Таким образом, это печатает все возвращаемые коды возврата, но не связывает их с элементом ввода, поэтому я не знаю, какие входы были обработаны успешно, а какие нет.
см. Http://stackoverflow.com/questions/7420812/add-custom-metadata-to-already-defined-itemgroup-from-another-itemgroup, например, который делает именно то, что вы хотите (просто использует ReadLines для получения выход вместо exexe, но принцип тот же) – stijn