2014-10-30 45 views
0

我試圖做一個自定義的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| &quot;$(ToolsHome)NuGet\NuGet.exe&quot; restore &quot;%(AllSolutions.Identity)&quot;"/> 
    </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,但似乎並不適用於此......

我還發現thisthis線程,但也有在任何路徑沒有雙斜槓或括號。繼承人的副本任務中輸出的一個例子:從

複製文件。 「X:\我的\回購\ SolutionDir \ PROJECTDIR \ BIN \發佈\ Example.dll」 到 」 \發佈\實例。 DLL」。

回答

1

即使AllSolutions項目具有RecursiveDir metadata,因爲在代碼中**通配符的填充,MSBuild task不填充在OutputFiles項目RecursiveDirTargetOutputs被放置到單個陣列中,具有完整路徑但不包含RecursiveDir元數據。

+0

所以是解決方案不使用輸出,而是隻是創建一個新的ItemGroup與文件複製大會任務? – moggizx 2014-10-31 07:27:05