Я пытаюсь сделать пользовательский MSBuild скрипт для построения всех решений в нашем хранилище:MSBuild RecursiveDir пуст
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SourceHome Condition=" '$(SourceHome)'=='' ">..\</SourceHome>
<ToolsHome Condition=" '$(ToolsHome)'=='' ">.\Tools\</ToolsHome>
<Configuration Condition=" '$(Configuration)'=='' ">Release</Configuration>
<DestFolder Condition=" '$(DestFolder)'=='' ">.\$(Configuration)\</DestFolder>
</PropertyGroup>
<ItemGroup>
<AllSolutions Include="$(SourceHome)**\*.sln"/>
</ItemGroup>
<Target Name="Default" DependsOnTargets="Clean;Build;Assemble"/>
<Target Name="Clean">
<Message Text="Cleaning projects..."/>
<MSBuild Projects="@(AllSolutions)"
Targets="Clean"
Properties="Configuration=$(Configuration);"/>
</Target>
<Target Name="RestorePackages">
<Message Text="Restoring packages..."/>
<Exec Command="echo y| "$(ToolsHome)NuGet\NuGet.exe" restore "%(AllSolutions.Identity)""/>
</Target>
<Target Name="Build" DependsOnTargets="RestorePackages">
<Message Text="Building projects..."/>
<MSBuild Projects="@(AllSolutions)"
ContinueOnError="true"
Properties="Configuration=$(Configuration)">
<Output ItemName="OutputFiles" TaskParameter="TargetOutputs"/>
</MSBuild>
</Target>
<Target Name="Assemble">
<Message Text="Assembling output..."/>
<RemoveDir Directories="$(DestFolder)"/>
<Copy SourceFiles="@(OutputFiles)"
DestinationFiles="@(OutputFiles->'$(DestFolder)%(RecursiveDir)%(Filename)%(Extension)')"/>
</Target>
</Project>
Скрипт работает хорошо для последней задачи копирования, где% (RecursiveDir) вычисляется в исключении пустую строку, помещая все файлы в корневую папку назначения ... Я не вижу, что я делаю неправильно здесь.
Я нашел MSBuild ITaskItem RecursiveDir metadata disappears, но это, кажется, не применяется здесь ...
Я также нашел this и this нити, но там нет двойных косых или брекетов в любых путях. Вот пример выхода во время задания копирования:
Копирование файла из . "Х: \ My \ репо \ SolutionDir \ ProjectDir \ Bin \ Release \ Example.dll" в »\ Release \ Пример. длл».
Итак, решение не использовать Output и вместо этого просто создать новую ItemGroup с файлами для копирования в задаче Assembly? – moggizx