Выходные данные настраиваемой задачи msbuild не распознаются

У меня есть настраиваемая задача 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) я расширяю msbuild, внедряя свою настраиваемую задачу в цель AfterBuild, как определено ниже.

<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"/>

However, msbuild complains "Unknown output parameter Result,'DeployJavaScript' should have no output parameters"

Почему я не могу вернуть выходной параметр в этом сценарии?

P.S Я знаю, что могу использовать Log.LogMessage (MessageImportance.high, "sucess", high) для регистрации результата в файле proj, который будет служить моей цели. Просто хочу знать, почему я не могу использовать выходной параметр.


person Hamza Ahmed Zia    schedule 07.08.2012    source источник


Ответы (1)


Вы должны изменить тип свойства Result в вашем коде. Используйте ITaskItem вместо string. Мне это помогло решить ту же проблему. Естественно, после этого ваш код должен будет создать экземпляр класса TaskItem: Result = new TaskItem(String.Format("Sucessfully Deployed Javascript Files"));

person Igor Soloydenko    schedule 16.01.2013