2012-08-07 56 views
1

我有以下自定义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的输出参数的自定义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

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