2009-03-03 2 views
11

빌드가 완료된 후에 생성 될 파일을 복사하는 작업으로 구성된 build.proj 파일을 만들었습니다. 문제는이 파일이 처음으로 복사되지 않으며 파일을 복사 할 수 있도록 build.proj에서 msbuild를 다시 실행해야한다는 것입니다. 누구든지 다음 build.proj 파일에 무슨 문제가 있는지 말해 줄 수 있습니까?MSBuild 복사 작업이 처음으로 파일을 복사하지 않습니다.

<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration> 

<SourcePath Condition="'$(SourcePath)' == ''">$(MSBuildProjectDirectory)</SourcePath> 

<BuildDir>$(SourcePath)\build</BuildDir> 

</PropertyGroup> 

<ItemGroup> 
    <Projects 
     Include="$(SourcePath)\src\myApp\application.csproj"> 
    </Projects> 
</ItemGroup> 

<Target Name="Build"> 
    <Message text = "Building project" />  
    <MSBuild 
    Projects="@(Projects)" 
    Properties="Configuration=$(Configuration)" /> 
</Target> 

<ItemGroup> 
    <OutputFiles Include ="$(MSBuildProjectDirectory)\**\**\bin\Debug\*.*"/> 
</ItemGroup> 

<Target Name="CopyToBuildFolder"> 
    <Message text = "Copying build items" /> 
    <Copy SourceFiles="@(OutputFiles)" DestinationFolder="$(BuildDir)"/> 
</Target> 

<Target Name="All" 
    DependsOnTargets="Build; CopyToBuildFolder"/> 

</Project> 
+0

내 CreateItem 태그를 추가 할 수 있습니다. –

+0

죄송합니다. 스크립트를 삽입하는 데 약간의 문제가있었습니다 ... 모든 항목이 지금 정렬되었습니다 – Draco

답변

21

스크립트가 구문 분석 될 때 항목 그룹이 평가됩니다. 그 당시 귀하의 파일은 아직 없습니다. 파일을 찾으려면 대상 내에서 항목 그룹을 채워야합니다.

<!-- SQL Scripts which are needed for deployment --> 
    <Target Name="BeforeCopySqlScripts"> 
    <CreateItem Include="$(SolutionRoot)\04\**\Databases\**\*.sql"> 
     <Output ItemName="CopySqlScript" TaskParameter="Include"/> 
    </CreateItem> 
    </Target> 

이 예에서는 Include 특성의 식을 사용하여 "CopySqlScript"라는 ItemGroup을 만듭니다.

편집 :

지금은 스크립트를 읽을 수 있습니다, 그것은 이해하지 제발 코드의 들여 쓰기를 수정하여 CopyToBuildFolder 대상

+0

이것은 완벽하게 작동합니다 ... thanks :) – Draco

+0

NP, 나도 이것을 알아내는 데 시간이 걸렸습니다. – thijs

+0

방금 ​​찾던 내용, thx Draco & thijs – GvS

관련 문제