Вы можете поместить общие цели в файл, который вы включаете, используя следующий синтаксис, вы также увидите его в ваших файлах proj:
<Import Project="path to file.targets"/>
Что нужно отметить:
- Соглашение заключается в использовании расширения .targets, но это не имеет значения.
- Место, куда вы помещаете импорт, важно в зависимости от того, хотите ли вы иметь возможность переопределять свойства или цели в импортированном файле целей.
- Цели не похожи на методы, вы не можете вызывать их более одного раза, но можете влиять на порядок их вызова.
- Если вам требуются многоразовые чанки, которые вы хотите вызывать несколько раз, создайтепользовательская библиотека задач, но сначала посмотрите MSBuildExtensionPack , чтобы узнать, есть ли у вас то, что вам нужно.
Цель вызова
По вопросу CallTarget
.CallTarget будет вызывать указанные цели так же, как DependsOnTargets
, BeforeTargets
и AfterTargets
.Цель будет запущена, только если она еще не была запущена.См. Следующий пример:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Foo">
<Target Name="Foo" DependsOnTargets="Bar">
<Message Text="Foo" />
<CallTarget Targets="Bar" />
<CallTarget Targets="Bar" />
</Target>
<Target Name="Bar" AfterTargets="Foo" BeforeTargets="Foo">
<Message Text="Bar" />
</Target>
</Project>
, который выдаст следующее:
Microsoft (R) Build Engine version 4.0.30319.17929
[Microsoft .NET Framework, version 4.0.30319.18449]
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 24/02/2014 12:06:59.
Project "D:\Dev\Test.proj" on node 1 (default targets).
Bar:
Bar
Foo:
Foo
Done Building Project "D:\Dev\Test.proj" (default targets).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:00.69