MSBuild get% (RecursiveDir) директива из пользовательского параметра задачи - PullRequest
0 голосов
/ 18 июня 2010

Я занимаюсь разработкой пользовательской задачи MSBuild, унаследованной от базового класса Task. Моя задача вызывает задачу «Копировать», объявленную в 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.

1 Ответ

0 голосов
/ 01 августа 2010

Связанный вопрос касается выходных параметров задачи, где этот вопрос касается входных данных.Проблема в том, что вы объявили DestinationFolder как ITaskItem, но передаете строку.

Вы не дали достаточно примеров, чтобы я мог точно понять, что вы пытаетесь сделать, но при условии, что у вас есть файл с именем "C: \ Development \ Test \ Bin \ SomeFile.txt", вы можете определить элемент в вашем проекте как:

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

Теперь ваша задача будет иметь доступ ко всем метаданным элемента, а RecursiveDir будет содержать «Bin \».

...