В MSBuild цели должны указывать входы и выходы, где это возможно (для включения расчета зависимости). При необходимости используйте атрибут Returns, чтобы указать цель, которая возвращает элементы, отличные от тех, которые используются для расчета зависимости.
Входные и выходные элементы для данной цели должны быть сгенерированы с использованием либо преобразования элементов (для простых преобразований на основе пути), либо другой цели (для более сложных преобразований).
Для MSBuild pre-4.x, для целей, которые вы определяете в файле .targets, рассмотрите возможность использования следующего шаблона, чтобы потребители могли вводить свои собственные цели перед теми, которые вы определяете:
<PropertyGroup>
<MyTargetDependsOn>
Target1;
Target2;
SomeOtherTarget
</MyTargetDependsOn>
</PropertyGroup>
<Target
Name="MyTarget"
DependsOnTargets="$(MyTargetDependsOn)">
</Target>
Это позволяет потребителям вводить свои собственные цели перед указанной целью, просто изменяя значение свойства MyTargetsDependsOn:
<PropertyGroup>
<MyTargetDependsOn>
$(MyTargetDependsOn);
YetAnotherTarget
</MyTargetDependsOn>
</PropertyGroup>
<Target
Name="YetAnotherTarget">
</Target>
В MSBuild 4.x вы можете просто использовать атрибуты BeforeTargets и AfterTargets.