Как заставить MSBuild действовать в списке папок? - PullRequest
0 голосов
/ 20 января 2019

Используя следующую задачу MSBuild, я могу получить все папки ниже текущего каталога:

Сначала определите связанную переменную среды:

set MSBUILDENABLEALLPROPERTYFUNCTIONS=1

Файл MSBuild:

  <Target Name="Christian_T">
    <ItemGroup>
      <Folders Include="$([System.IO.Directory]::GetDirectories('.', '*',
        System.IO.SearchOption.AllDirectories))"/>
    </ItemGroup>
    <Message Text="%(Folders.Identity)" />
  </Target>

Как запустить MSBuild в каждой из папок, собранных в Folders.Identity?

Если вы считаете, что мой подход, приведенный выше, совершенно неверен, тогда, пожалуйста, не стесняйтесь, чтобы я прямо сказал. Моя конечная цель - вызвать msbuild в верхней папке и собрать все файлы csproj в подпапках внизу.

1 Ответ

0 голосов
/ 21 января 2019

Хитрость заключается в том, чтобы использовать пакетную обработку MSBuild, которая расширит группу элементов с несколькими элементами в ней.

% (Folders.Identity)

Вы можете использовать этот синтаксис практически везде, где требуетсяодно значение, и MSBuild автоматически вызовет эту задачу для каждого элемента в ItemGroup.Для получения дополнительной информации см. Документацию:

https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-batching?view=vs-2017

...