Проблема с настройкой значений свойств - PullRequest
3 голосов
/ 25 марта 2010

Давайте рассмотрим приведенный ниже пример. Там у меня есть:

  1. target ОСНОВНОЙ вызов target t, затем call target tt.
  2. target t call target ttt, target tt call target tttt.
  3. target t определяет свойство aa, target ttt modify aa.
  4. target tttt пытается напечатать значение свойства aa.
  5. короче говоря, у нас есть: MAIN -> {t -> {ttt-> изменить aa, определить aa}, tt -> tttt -> print aa}

Но в target tttt мы не можем «увидеть» обновленное значение aa (по ttt)! Пожалуйста, помогите мне сделать это значение видимым для цели tttt. Спасибо!

Весь сценарий выглядит так:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="MAIN" >
  <Target Name="MAIN" >
    <CallTarget Targets="t" />
    <CallTarget Targets="tt" />
  </Target>

  <Target Name="t">
    <Message Text="t" />
    <PropertyGroup>
      <aa>1</aa>
    </PropertyGroup>
    <CallTarget Targets="ttt" />
  </Target>

  <Target Name="tt">
    <Message Text="tt" />
    <CallTarget Targets="tttt" />
  </Target>

  <Target Name="ttt">
    <PropertyGroup>
      <aa>122</aa>
    </PropertyGroup>
    <Message Text="ttt" />
  </Target>

  <Target Name="tttt">
    <Message Text="tttt" />
    <Message Text="tttt:$(aa)" />
  </Target>

</Project>

1 Ответ

2 голосов
/ 26 марта 2010

Как уже говорилось в ответе на другой пост, вам следует смоделировать ваш проект MSBuild с зависимостями между вашими целями, а не вызывать цели один за другим.

<Project DefaultTargets="tttt" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="t">
        <Message Text="t" />
            <PropertyGroup>
                <aa>1</aa>
            </PropertyGroup>
     </Target>

     <Target Name="tt" DependsOnTargets="t">
         <Message Text="tt" />
     </Target>

     <Target Name="ttt" DependsOnTargets="t;tt">
         <PropertyGroup>
             <aa>122</aa>
         </PropertyGroup>
         <Message Text="ttt" />
     </Target>

     <Target Name="tttt" DependsOnTargets="t;tt;ttt">
         <Message Text="tttt" />
         <Message Text="tttt:$(aa)" />
     </Target>
</Project>

Подход, который я использую, заключается в определении цели как моей конечной цели и включении ее в проекты DefaultTargets.

Затем добавьте все, что должно произойти для достижения этой цели.

...