2011-07-29 1 views
1

MSBuild에서 다양한 프로젝트 대상을 처리하고 있으며 매우 유연하다는 것을 알게되었습니다. (또한 CI 시스템의 가능성을 이해하는 데 도움이됩니다.)MSBuild : 사용자 지정 작업을 작성하고 호출하지만 MSBuild에서 TaskFactory가 필요하다고 생각합니다.

SubWCRev를 호출하고 출력을 구문 분석하는 사용자 지정 작업을 작성한 프로젝트의 현재 SVN 수정본을 가져와야합니다.

<Target Name="Version" BeforeTargets="BuildDatabase"> 
     <xxx.Elements.Build.MSBuildTasks.SubWCRev WorkingCopyDir="$(ProjectDir).."> 
      <Output TaskParameter="LastCommittedRevision" ItemName="LastCommittedRevision" /> 
      <Output TaskParameter="MixedRevisionRangeMinimum" ItemName="MixedRevisionRangeMinimum" /> 
      <Output TaskParameter="MixedRevisionRangeMaximum" ItemName="MixedRevisionRangeMaximum" /> 
      <Output TaskParameter="HasLocalModifications" ItemName="HasLocalModifications" /> 
     </xxx.Elements.Build.MSBuildTasks.SubWCRev> 
     <Message Text="Revision is @(LastCommittedRevision)" /> 
    </Target> 

내 문제는 MSBuild에서 내가 this document는 선택 사항입니다 말한다 TaskFactory 속성을 사용하는 주장이다 ... 나는 다음 작업을 실행

<UsingTask TaskName="xxx.Elements.Build.MSBuildTasks.SubWCRev" AssemblyFile="D:\dev\xxx_presentation\Build\xxx.Elements.Build.dll"> 
    <ParameterGroup> 
     <LastCommittedRevision ParameterType="System.Int" Required="False" Output="True" /> 
     <MixedRevisionRangeMinimum ParameterType="System.Int" Required="False" Output="True" /> 
     <MixedRevisionRangeMaximum ParameterType="System.Int" Required="False" Output="True" /> 
     <HasLocalModifications ParameterType="System.Boolean" Required="False" Output="True" /> 
    </ParameterGroup> 
</UsingTask> 

:

나는이 요소를 사용하여 참조 . . 그리고 나는 또한 TaskFactory는 내가 관심이 아니에요 인라인 작업에 특히 것으로보고있다

오류 메시지는 다음과 같습니다

필요한 속성 "TaskFactory"요소 UsingTask에서 비어 있거나 누락되었습니다.

어디로 잘못 가고 있습니까?

은 (그리고 그런데, 나는 우수한 것으로 MSBuild Sidekick 3을 발견하고 꽤 복잡한 스크립트가 될 수 있는지의 저항을 감소하고 있습니다.) 당신이 전통적인 방식으로 UsingTask을 지정하는 경우

답변

5

그 속성은 선택 사항입니다

<UsingTask 
    TaskName="MyCustomTask" 
    AssemblyFile="$(PathToTasks)/MyCustomTasks.dll" 
    /> 

인라인 작업을 지정할 때이 속성은 더 이상 선택 사항이 아닙니다. 다음을 사용하십시오 :

<UsingTask 
    TaskName="EnableAllPropertyFunctions" 
    TaskFactory="CodeTaskFactory" 
    AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"> 
    <ParameterGroup>... 
    <Task>... 
</UsingTask> 

두 가지를 혼합하여 사용하는 것으로 보입니다. 빌드 된 어셈블리 "D : \ dev \ xxx_presentation \ Build \ xxx.Elements.Build.dll"에서 작업을 사용하는 경우 ParameterGroup을 지정하면 안되며 MSBuild는 매개 변수를 찾는 방법을 알고 있습니다. 선언에 MSBuild가 나머지 인라인 작업을 찾으려고한다는 것을 의미합니다.

+0

아, 고마워. 나는 그것이 그렇게 될 것이라고 생각했다. –