Наследовать родительский файл MsBuild - PullRequest
2 голосов
/ 28 февраля 2012

У меня есть структура проекта, которая выглядит следующим образом:

Parent - ChildProjects1 - ChildProjects2 - ChildProjects3

У меня есть файл msbuild под каждым узлом ChildProjects, который создает соответствующие проекты,создает zip-файлы, маркирует их в subversion и т. д.

Однако большая часть этой логики является общей для ChildProjects.Мне интересно, могу ли я реорганизовать эту общую логику, чтобы она находилась в другом файле msbuild на родительском уровне, и чтобы каждый потомок унаследовал это?

Любые идеи на этот счет приветствуются.

1 Ответ

3 голосов
/ 28 февраля 2012

Вы можете поместить общие цели в файл, который вы включаете, используя следующий синтаксис, вы также увидите его в ваших файлах 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...