继承父MsBuild文件

时间:2012-02-28 11:29:05

标签: msbuild

我的项目结构如下:

父        - ChildProjects1        - ChildProjects2        - ChildProjects3

我在每个ChildProjects节点下都有一个msbuild文件,用于构建相关项目,创建zip文件,在subversion中标记它们等等。

然而,大多数这种逻辑在ChildProjects之间很常见。我想知道我是否可以重构这个常用逻辑来坐在父级别的另一个msbuild文件中并让每个孩子继承这个?

对此的任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:3)

您可以使用以下语法将常用目标放在您包含的文件中,您也可以在proj文件中看到它:

<Import Project="path to file.targets"/>

注意事项:

  • 惯例是使用.targets扩展名但没关系。
  • 放置导入的位置很重要,具体取决于您是否希望覆盖导入的目标文件中的属性或目标。
  • 目标与方法不同,您不能多次调用它们,但可以影响它们的调用顺序。
  • 如果您需要多次调用可重复使用的块,请创建自定义任务库,但请先查看MSBuildExtensionPack,看看它是否符合您的要求。

致电目标

关于CallTarget的问题。 CallTarget将以DependsOnTargetsBeforeTargetsAfterTargets的方式调用指定的目标。目标只有在尚未运行时才会运行。请参阅以下示例:

<?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