我試圖做一個自定義的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線程,但也有在任何路徑沒有雙斜槓或括號。繼承人的副本任務中輸出的一個例子:從
複製文件。 「X:\我的\回購\ SolutionDir \ PROJECTDIR \ BIN \發佈\ Example.dll」 到 」 \發佈\實例。 DLL」。
所以是解決方案不使用輸出,而是隻是創建一個新的ItemGroup與文件複製大會任務? – moggizx 2014-10-31 07:27:05