0

我正在通过从基 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.

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

4

1 回答 1

0

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

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

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

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

于 2010-07-31T21:00:18.577 回答