2009-10-08 5 views
8

현재 코드를 .\Release 폴더로 컴파일하는 웹 배포 프로젝트를 설정했습니다. 빌드가 끝나면 다른 컴퓨터로 파일을 복사하려고합니다 (어느 디렉토리를 빌드 했든간에 삭제 된 다음 다시 작성되기 때문에).웹 배포 프로젝트 - 빌드 후 파일 복사

다음과 같이 설정 복사 할 파일을 정의하는 ItemGroup :

<ItemGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'"> 
    <ReleaseFiles Include=".\Release\**\*" /> 
    <OverrideFiles Include="..\website\App_Code\override\site.com\**\*" /> 
</ItemGroup> 

'웹 사이트는'여러 사이트에 사용되는 코드이므로, 솔루션 내 설정 여러 웹 배포 프로젝트가있다.

<Target Name="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <Copy SourceFiles="@(ReleaseFiles)" ContinueOnError="true" SkipUnchangedFiles="true" DestinationFiles="@(ReleaseFiles->'\\server\web\site.com\%(RecursiveDir)%(Filename)%(Extension)')" /> 
    <Copy SourceFiles="@(OverrideFiles)" DestinationFiles="@(OverrideFiles->'\\server\web\site.com\%(RecursiveDir)%(Filename)%(Extension)')" /> 
</Target> 

는 그러나, ReleaseFiles는 복사되지 않습니다, 그것의 원인이 될 수있는 일 :

그런 다음, 나는 파일을 복사 할 AfterBuild 목표를 가지고? 내가 .\TempBuildDir\folder\subfolder - The process cannot access the file because it is being used by another process. 때마다 folder\subfolder 다를 수 있지만 그 메시지가 나타나지 않는 경우에도 여전히 파일이 복사되지 않습니다.

문제는 이전에 작동했습니다.

답변

9

핵심 문제는 샘플의 ItemGroup이 MSBuild에서 파일이로드 될 때 평가되고 있다는 점이다 - ..... 그 시간에, 가장 가능성이, 그 파일이 아직 존재하지 않는

따라서 "ReleaseFiles"및 "OverrideFiles"모음은 비어 있으며 아무 것도 복사되지 않습니다. 당신이해야 할 일은

빌드가 발생했습니다 (여기 참조 된 파일이 실제로 존재) 동적 당신의 ItemGroups 후 만들 수 있습니다 :

<CreateItem Include=".\Release\**\*"> 
    <Output TaskParameter="Include" ItemName="ReleaseFiles"/> 
</CreateItem> 
<CreateItem Include="..\website\App_Code\override\site.com\**\*"> 
    <Output TaskParameter="Include" ItemName="OverrideFiles"/> 
</CreateItem> 

지금 당신이 잘해야하고, 복사 작업을해야 작업.

마크

+0

CreateItem은 ItemGroup 또는 Target 아래에 있습니까? – SamWM

+0

복사 작업 전에'AfterBuild' 대상에 넣어야합니다. –

+0

그게 나를 위해 고정 – SamWM