Пакетная обработка в MSBuild
Обновлен: Ноябрь 2007
В MSBuild можно разделять наборы элементов на разные категории, или пакеты, на основании метаданных элементов и выполнять целевой объект или задачу с использованием каждого пакета в отдельности.
Пакетная обработка задач
Пакетная обработка задач позволяет упростить файлы проекта, предоставляя способ разделения наборов элементов на различные пакеты и передачи каждого пакета задаче отдельно. Это означает, что в файле проекта необходимо только один раз объявить задачу и ее атрибуты, даже если задача выполняется несколько раз.
Используя запись %(ItemMetaDataName) в одном из атрибутов задачи, вы указываете, что MSBuild следует выполнить пакетную обработку задачи. В приведенном ниже примере набор элементов Example разделяется на пакеты на основании значения метаданных элемента Color, и каждый из пакетов отдельно передается в задачу MyTask.
Примечание. |
---|
Если ссылка на набор элементов не используется в каких-либо других атрибутах задачи, или имя метаданных может оказаться неоднозначным, можно использовать запись %(ItemCollection.ItemMetaDataName), чтобы полностью определить значение метаданных элемента, которое будет использоваться для пакетной обработки. |
<Project
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Example Include="Item1">
<Color>Blue</Color>
</Example>
<Example Include="Item2">
<Color>Red</Color>
</Example>
</ItemGroup>
<Target Name="RunMyTask">
<MyTask
Sources = "@(Example)"
Output = "%(Color)\MyFile.txt"/>
</Target>
</Project>
Другие характерные примеры пакетной обработки см. в разделе Практическое руководство. Пакетная обработка задач на основе метаданных элемента.
Пакетная обработка целевых объектов
Прежде чем выполнять целевой объект, MSBuild проверяет актуальность входных и выходных данных целевого объекта. Если и входные, и выходные данные актуальны, целевой объект пропускается. Если пакетная обработка используется в задаче, находящейся внутри целевого объекта, MSBuild требуется определить, являются ли актуальными входные и выходные данные для каждого пакета элементов. Иначе целевой объект выполняется каждый раз.
В следующем примере показан элемент Target, в котором содержится атрибут Outputs с записью %(ItemMetaDataName). MSBuild разделит набор элементов Example на пакеты на основании метаданных элемента Color и проанализирует метки времени выходных файлов для каждого пакета. Если выходные данные из пакета неактуальны, целевой объект выполняется. В противном случае целевой объект пропускается.
<Project
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Example Include="Item1">
<Color>Blue</Color>
</Example>
<Example Include="Item2">
<Color>Red</Color>
</Example>
</ItemGroup>
<Target Name="RunMyTask"
Inputs="@(Example)"
Outputs="%(Color)\MyFile.txt">
<MyTask
Sources = "@(Example)"
Output = "%(Color)\MyFile.txt"/>
</Target>
</Project>
Другой пример пакетной обработки целевого объекта см. в разделе Практическое руководство. Пакетная обработка целей на основе метаданных элемента.
См. также
Основные понятия
Дополнительные возможности MSBuild
Ссылки
Элемент ItemMetadata (MSBuild)