Как использовать выходные параметры из цели в msbuild - PullRequest
4 голосов
/ 22 февраля 2011

Я пытаюсь понять некоторую концепцию MSBuild (я знаком с NAnt).

Я пытаюсь инициализировать какое-то свойство в цели, а затем использовать его в другом. Вот пример

<propertygroup>
 <MyProp>X</MyProp>
</propertygroup>

<target name="Main">
 <message text="$(MyProp)"/> <!--display 'X'-->
 <CallTarget Target="Sub">
   <Output TaskParameter="localProp" PropertyName="MyProp"/>
 </CallTarget>
<message text="$(MyProp)"/> <!-- should display 'Y'-->
</target>

<target name="Sub" Outputs=$(localProp)>
 <propertygroup>
  <localProp>Y</localProp>
 </propertygroup>
</target>

И это, конечно, не работает.

Ответы [ 2 ]

6 голосов
/ 06 мая 2016

Помимо некоторых незначительных синтаксических ошибок в случае элемента (то есть target-> Target), есть две основные вещи, которые необходимо исправить, чтобы он работал: 1) Атрибут TaskParameter должен быть установлен в «TargetOutputs» 2) Атрибут Outputs Sub target должен быть заключен в кавычки

Это рабочий пример:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Main">

    <PropertyGroup>
        <MyProp>X</MyProp>
    </PropertyGroup>

    <Target Name="Main">
        <Message text="$(MyProp)"/> <!--display 'X'-->
        <CallTarget Targets="Sub">
            <Output TaskParameter="TargetOutputs" PropertyName="MyProp"/>
        </CallTarget>
        <Message text="$(MyProp)"/> <!-- should display 'Y'-->
    </Target>

    <Target Name="Sub" Outputs="$(localProp)">
        <PropertyGroup>
          <localProp>Y</localProp>
        </PropertyGroup>
    </Target>
</Project>

Вышеуказанные выходы:

Microsoft (R) Build Engine version 4.6.1055.0
[Microsoft .NET Framework, version 4.0.30319.42000]
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 5/6/2016 9:51:37 AM.
Project "C:\workspace\dev\msbuild\temp.msbuild" on node 1 (default targets).
Main:
  X
  Y
Done Building Project "C:\workspace\dev\msbuild\temp.msbuild" (default targets).

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.07
6 голосов
/ 22 февраля 2011

Вы путаете выходы, определенные в цели, с выходными параметрами задачи.

Выходы для цели используются в анализе зависимостей:

Целевой элемент MSBuild

MSBuild Transforms - Анализ зависимостей

Выходные параметры задачи используются для возврата данных:

Простой пример здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...