Массив MSBuild ITaskItem устарел


Я создаю пользовательскую задачу ITask для MSBuild, которая загружает выходные файлы моей сборки. Я использую проект веб-развертывания для публикации моего приложения и подключения к цели AfterBuild для выполнения своей пользовательской работы.

Если я добавляю файл в свое веб-приложение, то при первом выполнении сборки моя пользовательская задача не распознает недавно добавленный файл. Для того, чтобы этот файл появился в моем массиве ITaskItems, я должен сначала выполнить сборку с удаленной целью "AfterBuild", а затем запустить сборку снова с моей "Послестроительной" целью на месте.

Вот как выглядит мой файл сборки:

<ItemGroup>
    <PublishContent Include="$(OutputPath)**" />
</ItemGroup>

<Target Name="AfterBuild">
    <UploadTask FilesToPublish="@(PublishContent)" />
</Target>

Список в @(PublishContent), по-видимому, инициализируется в начале сборки вместо того, чтобы отражать любые изменения, которые могли бы иметь место в самом процессе сборки.

Есть идеи?

Спасибо

1 2

1 ответ:

Ваша ItemGroup будет оцениваться при первой загрузке файла проекта (при первом открытии Visual Studio или при "выгрузке" и "перезагрузке" проекта в обозревателе решений).

Что вам, вероятно, нужно, так это создать ItemGroup в качестве задачи в вашей цели "AfterBuild". Пример:

<CreateItem Include="$(OutputPath)\**">
      <Output TaskParameter="Include" ItemName="OutputFiles"/>
</CreateItem>

Затем:

<Target Name="AfterBuild">
    <UploadTask FilesToPublish="@(OutputFiles)" />
</Target>