2012-08-07 52 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"));