无法识别自定义msbuild任务输出

时间:2012-08-07 09:40:47

标签: msbuild extend msbuild-task csproj

我有一个自定义的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'应该没有输出参数”

为什么我在这种情况下无法返回输出参数?

P.S 我知道我可以使用Log.LogMessage(MessageImportance.high,“sucess”,high)将结果记录在proj文件中,这将有助于我的目的。只是想知道为什么我不能使用输出参数。

1 个答案:

答案 0 :(得分:2)

您必须更改代码中Result属性的类型。使用ITaskItem代替string。对我来说,它有助于解决同样的问题。 当然,您的代码必须在此之后创建TaskItem类的实例: Result = new TaskItem(String.Format("Sucessfully Deployed Javascript Files"));