我有一个自定义的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'应该没有输出参数"
为什么在这种情况下我不能返回输出参数?
附言我知道我可以使用Log.LogMessage(MessageImportant.high,"success",high)将结果记录在proj文件中,这将达到我的目的。只是想知道为什么我不能使用输出参数。
您必须更改代码中 Result
属性的类型。使用 ITaskItem
而不是 string
。对我来说,它有助于解决同样的问题。当然,您的代码必须在此之后创建TaskItem
类的实例: Result = new TaskItem(String.Format("Sucessfully Deployed Javascript Files"));