2

以下に定義された出力パラメーターを持つカスタムmsbuildタスクがあります

 public class DeployJavaScript : Task
{
    [Required]
    public ITaskItem[] SourceFiles { get; set; }

    [Output]
    public string Result { get; set; }

    #region Overrides of Task

    public override bool Execute()
    {
        foreach (var sourceFile in SourceFiles)
        {
        }
        Result = String.Format("Sucessfully Deployed Javascript Files");
        return true;
    }

    #endregion Overrides of Task
}

ビルドスクリプト(csprojファイル)で、以下に定義するように、AfterBuildターゲットにカスタムタスクを挿入してmsbuildを拡張します

<Target Name="AfterBuild">
<Message Text="AfterBuild Begin" Importance="high"/>
<PropertyGroup>
  <JavaScriptFolderPath Condition=" '$(JavaScriptFolderPath)' == '' " >$(MSBuildProjectDirectory)\</JavaScriptFolderPath>
  <JavaScriptFilePath></JavaScriptFilePath>
</PropertyGroup>
<ItemGroup>
  <JavaScriptFolderFiles Include="$(JavaScriptFolderPath)\**\*.js"/>
</ItemGroup>
<ItemGroup>
  <JavaScriptFiles Include="$(JavaScriptFilePath)"/>
</ItemGroup>
<DeployJavaScript SourceFiles="@(JavaScriptFolderFiles->'%(FullPath)')">
  <Output TaskParameter="Result" PropertyName="ResultofJavaScriptDeployment"/>
</DeployJavaScript>
<Message Text="$(ResultofJavaScriptDeployment)" Importance="high"/>
<Message Text="AfterBuild Complete" Importance="high"/>

ただし、msbuildは「不明な出力パラメーターの結果、「DeployJavaScript」には出力パラメーターがないはずです」と文句を言います。

このシナリオで出力パラメーターを返すことができないのはなぜですか?

PS Log.LogMessage(MessageImportance.high、 "sucess"、high)を使用して、目的に役立つprojファイルに結果を記録できることを知っています。出力パラメータを使用できない理由を知りたいだけです。

4

1 に答える 1

2

Resultコード内のプロパティのタイプを変更する必要があります。ITaskItemの代わりに使用してくださいstring。私にとって、それは同じ問題を解決するのに役立ちました。当然、コードはTaskItemその後クラス のインスタンスを作成する必要があります。Result = new TaskItem(String.Format("Sucessfully Deployed Javascript Files"));

于 2013-01-16T13:50:24.780 に答える