2009-09-03 38 views
28

我想计算一个MsBuild任务中的路径,以供另一个MsBuild任务使用。 完成此操作的最佳方法是什么?从MsBuild任务返回输出?

设置环境变量,打印到控制台,...?

回答

42

使用属性或项目。您的MSBuild计算路径,将其作为属性返回,并将此属性用作其他任务的输入。

public class CalculatePathTask : ITask 
{ 
    [Output] 
    public String Path { get; set; } 

    public bool Execute() 
    {         
     Path = CalculatePath(); 

     return true; 
    } 
} 
<Target Name="CalculateAndUsePath"> 
    <CalculatePathTask> 
    <Output TaskParameter="Path" PropertyName="CalculatePath"/> 
    </CalculatePathTask> 

    <Message Text="My path is $(CalculatePath)"/> 
</Target> 

如果你需要传递两个MSBuild项目之间的值,你应该创建一个第三个将使用MSBuild任务拨打对方,并使用TargetOutputs元素找回价值,你想。

+2

只是一个简短的说明:在我的情况下'ItemName'不工作。只要我将它改为“PropertyName”,它就像一个魅力一样。 – sebagomez 2011-11-26 03:12:53

+0

尝试了此操作,但是“MyCustomTask”任务不支持“TaskParameter”参数。验证任务中是否存在参数,并且它是一个可设置的公共实例属性 – jpierson 2017-02-06 20:38:16