MSBuild从自定义任务参数获取%(RecursiveDir)指令

时间:2010-06-18 13:23:46

标签: msbuild msbuild-task itaskitem

我正在通过继承基本Task类来开发自定义MSBuild任务。我的任务调用在Microsoft.Build.Tasks.dll中声明的复制任务,在进程中设置DestinationFolder属性。我的自定义任务有一个名为DestinationFolder的属性,声明为

public ITaskItem DestinationFolder { get; set; }

从构建/项目文件调用此任务时,我可能会传入一个参数,例如

<MyTask DestinationFolder="C:\Development\Test\%(RecursiveDir)"

我遇到的问题是,当执行此任务时,DestinationFolder属性似乎不知道%(RecursiveDir)位,而只是似乎设置为C:\Development\Test\Bin

This question似乎表明这个问题没有解决办法。这绝对是这样吗?我想知道是否可以将属性声明为一个简单的字符串,然后动态创建一个TaskItem对象,如果DestinationFolder字符串包含特殊的%(RecursiveDir)指令,则相应地设置TaskItem对象。

1 个答案:

答案 0 :(得分:0)

链接的问题处理来自任务的输出参数,其中此参数处理输入。这里的问题是你已经将DestinationFolder声明为ITaskItem,但是你传入了一个字符串。

你还没有给我足够的例子来弄清楚你想要做什么,但假设你有一个名为“C:\ Development \ Test \ Bin \ SomeFile.txt”的文件,你可以在项目中定义项目,如:

<ItemGroup>
    <DestinationFolderArgument Include="C:\Development\Test\**\SomeFile.txt" />
</ItemGroup>
<MyTask DestinationFolder="@(DestinationFolderArgument)" />

现在您的任务可以访问所有项目的元数据,RecursiveDir将包含“Bin”。

相关问题