2014-10-30 3 views
0

비어 :MSBuild를 RecursiveDir 나는 우리의 저장소에있는 모든 솔루션을 구축하기 위해 사용자의 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> 
빈 문자열, 루트 대상 폴더에있는 모든 파일을 가하고 ... 나는 내가 여기서 잘못하고있는 것을 볼 수 없습니다.

나는 MSBuild ITaskItem RecursiveDir metadata disappears을 발견하지만

는 또한 thisthis 스레드를 찾았지만 어떤 경로에는 이중 슬래시 또는 괄호가 없습니다 ... 여기에 적용하지 않는 것 같습니다. Heres는 복사 작업시 출력의 예 : 에서

복사 파일. "X : \ 내 \의 repo \ SolutionDir PROJECTDIR \ 빈 \ 릴리스 \ Example.dll \" 에 "\ 릴리스 \ 예. dll ".

답변

1

AllSolutions 항목 RecursiveDir metadata 때문에 코드에서 ** 와일드 카드의 인구에도 불구하고, MSBuild taskOutputFiles 항목에 RecursiveDir을 채우기되지 않습니다. TargetOutputs은 전체 경로는 있지만 RecursiveDir 메타 데이터가없는 단일 배열에 배치됩니다.

+0

Output을 사용하지 않고 대신 Assembly 작업에서 복사 할 파일을 사용하여 새 ItemGroup을 만드는 방법이 있습니까? – moggizx