У меня есть простой конвертер Word в Pdf в качестве задачи MSBuild. Задача принимает файлы Word (ITaskItems) в качестве входных данных и файлы PDF (ITaskItems) в качестве выходных данных. Скрипт использует преобразование Target для преобразования:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<UsingTask AssemblyFile="$(MSBuildExtensionsPath)\MyTasks.dll" TaskName="MyTasks.DocToPdf" />
<Target Name="Build" DependsOnTargets="Convert" />
<Target Name="Convert"
Inputs="@(WordDocuments)"
Outputs="@(WordDocuments->'%(FileName).pdf')">
<DocToPdf Inputs="@(WordDocuments)"
Outputs="%(FileName).pdf">
<Output TaskParameter="ConvertedFiles" ItemName="PdfDocuments" />
</DocToPdf>
</Target>
<ItemGroup>
<WordDocuments Include="One.doc" />
<WordDocuments Include="SubDir\Two.doc" />
<WordDocuments Include="**\*.doc" />
</ItemGroup>
</Project>
Что происходит, так это то, что SubDir \ Two.doc конвертируется при каждой инкрементальной сборке, а One.doc - нет (т. Е. MSBuild правильно пропускает этот файл, поскольку он уже был конвертирован). Если я использую спецификацию рекурсивных элементов (третий выше), я получаю то же самое поведение (т. Е. One.doc конвертируется, только если PDF устарел или отсутствует, но все документы в подкаталогах всегда конвертируются независимо).
Что я здесь не так делаю?