2010-06-03 3 views
3

하나의 대상에서 변수를 시작한 상위 대상으로 출력하려고합니다. 예를 들어,MSBuild 변수를 출력 할 때 문제가 발생했습니다.

대상 1은 단순히 파일 2의 작업을 호출하고 그 안에 변수 집합을 사용할 수 있어야합니다. 그러나, 나는 그것을 작동시킬 수없는 것 같습니다 (잘못된 구문일까요?). 대상 (1)은 다음과 같습니다 : 그것은 텍스트 파일의 값을 읽고 속성에 설정하고 변수를 설정하는 경우

<Target Name="RetrieveParameter"> 
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="ObtainOutput" /> 
    <Message Text="Output = $(OutputVar)" /> 
</Target> 

대상 2가 'OutputVar에'일치. 이것은 부모에게 반환되어야합니다.

<Target Name="ObtainOutput" Outputs="$(OutputVar)"> 
    <ReadLinesFromFile File="output.txt"> 
     <Output TaskParameter="Lines" 
       PropertyName="OutputVar" /> 
    </ReadLinesFromFile> 
</Target> 

나는 MSBuild를 작업에 아주 새로운 해요, 그래서 잘 분명 뭔가있을 수 있습니다. 내가하고 싶은 일은 하나의 작업에 변수를 설정 한 다음 호출 한 부모 작업에서 변수를 사용할 수있게하려는 것입니다.

답변

4

당신은 MSBuild 작업의 TargetOutputs를 사용해야합니다 :

<Target Name="RetrieveParameter"> 
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="ObtainOutput"> 
    <Output TaskParameter="TargetOutputs" ItemName="OutputVar"/> 
    </MSBuild> 
    <Message Text="Output = @(OutputVar)" /> 
</Target> 

(MSBuild task에 대한 자세한 정보).

5

줄리앙은 올바른 대답을했지만 정확한 이유를 설명하지 않았습니다.

msbuild 작업에 익숙하지 않으므로 Julien의 대답이 올바른 이유를 설명하겠습니다.

msbuild의 모든 작업에는 매개 변수가 있습니다. 작업에 넣은 속성으로 알 수 있습니다. 이러한 매개 변수는 Output 요소를 배치하여 다시 읽을 수 있습니다. 이것은 당신이

  • 항목 이름을 얻기 위해 할 작업의 속성/매개 변수의 이름입니다 - - 출력 요소가

    • TaskParameter을 사용할 수있는 3 개 속성이이에 해당 매개 변수 값을 넣어 itemgroup입니다
    • PROPERTYNAME -이, 당신이 다른 하나를 호출 한 원래 스크립트에

    에 해당 매개 변수 값을 넣어 속성의 이름입니다. 두 번째 스크립트는 다른 컨텍스트에서 실행되므로 설정하는 속성이나 항목 그룹은 해당 컨텍스트에만 존재합니다. 따라서 두 번째 스크립트가 완료되면 값을 캡처하기 위해 일부 출력 요소를 지정하지 않으면이 값은 무시됩니다.

    여러 개의 매개 변수를 캡처하거나 여러 속성/항목 그룹에 동일한 값을 설정하기 위해 작업 아래에 둘 이상의 Output 요소를 넣을 수 있습니다.

  • +1

    +1에 대한 설명입니다. –

    관련 문제