2012-08-07 3 views
1

나는 내가 AfterBuild 대상에서 내 사용자 지정 작업을 주입하여 MSBuild를 확장 내 빌드 스크립트 (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 
} 

아래에 정의 된 출력 매개 변수를 사용자 지정은 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 속성의 유형을 변경해야합니다. string 대신 ITaskItem을 사용하십시오. 저에게 그것은 같은 문제를 해결하는 데 도움이되었습니다. 당연히 코드는 TaskItem 클래스의 인스턴스를 만들어야합니다. Result = new TaskItem(String.Format("Sucessfully Deployed Javascript Files"));

관련 문제