2011-07-29 15 views
1

私はMSBuildにさまざまなプロジェクトのターゲットを処理しています。MSBuild:カスタムタスクを記述して呼び出しますが、MSBuildはTaskFactoryが必要だと思っています

私は、SubWCRevを呼び出して出力を解析するカスタムタスクを書いたプロジェクトの現在のSVNリビジョンを取得する必要があります。これは、私のCIシステムの可能性を理解する助けにもなります。

<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から空または欠落しています。

どこが間違っていますか?あなたは伝統的な方法でUsingTaskを指定する際に属性はオプションであることを

(ところで、私が優れていることがMSBuild Sidekick 3を見つけ、かなり複雑なスクリプトになることができます何の抵抗を低減しています。)

答えて

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

ああ、ありがとう。私はそれがそれのようなものになると思った。 –

関連する問題