2017-09-11 6 views
1

원본 파일을 준비 디렉토리로 복사하는 대상이 있습니다. 이는 여러 프로젝트에서 발생합니다. 나중에 프로젝트에서 이러한 파일은 일종의 컴파일러로 전달됩니다.msbuild로 부실 파일을 안전하게 제거합니다.

현재 스테이징 디렉토리가 정리되지 않았으므로 소스 파일이 삭제되면 스테이징 디렉토리에 부실 사본이 생깁니다.

증분 빌드 시간에 부정적인 영향을 미치지 않고 부실 파일의 준비 디렉토리를 정리하는 가장 좋은 방법은 무엇입니까? (즉, 완벽하게 준비 디렉토리 매번 삭제하지 않고.)

+0

당신이 이상한 용어를 사용하고 있기 때문에 아마도 당신이 달성하기를 원하는 것이 확실하지 않습니다. 일반적으로 빌드 시스템의 컨텍스트에서 '청소'에 대해 이야기 할 때, 빌드에서 생성 된 모든 인공물을 삭제하는 '빌드'의 반대 단계를 실행하는 단계입니다. 따라서 디렉토리를 '정리'하는 것과 삭제하는 것 사이에는 차이가 없습니다. 나는 당신이 뭔가 다른 것을 의미한다고 생각합니다. 정확히 무엇입니까? 당신이 뭘하고 싶은지에 대한 구체적인 예를 제공하십시오. – stijn

+0

@stijn 예. 빌드하는 동안 디렉토리 A의 파일이 일련의 프로젝트에 대해 디렉토리 B에 복사됩니다. 이후 프로젝트 (동일한 솔루션)에서는 디렉토리 B의 모든 파일이 컴파일됩니다. 빌드 (또는 클린 빌드)의 어떤 시점에서도 디렉토리 B의 파일이 제거되지 않습니다. 따라서 디렉토리 A (소스 제어에서)에서 파일을 제거하면 수동으로 제거하지 않는 한 디렉토리 B에 보관됩니다. 전체 빌드 B에 영향을 미칠 전체 디렉터리 B를 삭제하지 않고 빌드 시작시 디렉터리 B에서 이러한 '오래된'파일을 삭제하는 방법을 원합니다. 말이 돼? – Cuthbert

+0

그래서 기본적으로 실제 빌드 전에 실행되고 dir B의 모든 파일을 나열하고 dir A에없는 파일 만 삭제하는 추가 빌드 단계가 필요합니까? 또는 A에 대한 마스터 목록으로 가지고있는 모든 것; 어딘가에 목록이 필요합니다. 그렇지 않으면 추측입니다. 당신은 복사가 어떻게 이루어지는지를 보여주는 코드를 게시해야합니다. 그리고 입력 파일을 어디에서 가져 오는지 그리고 그 정보를 귀하의 질문에 추가하십시오. (위의 귀하의 의견에있는 정보가 귀하의 질문에도 실제로 포함되어있는 것처럼) – stijn

답변

0

소스에서 제거 된 파일을 정리하기 위해 스크립트의이 비트를 사용하여 종료하지만 여전히 대상에 존재 : 나는 '

<Target Name="DeleteStaleFiles"> 
    <!-- Remove stale files (files which have been deleted at the source but still exist in the destination). --> 
    <ItemGroup> 
     <SourceFiles Include="@(SourceFiles->'$(Destination)\%(RecursiveDir)%(Filename)%(Extension)')" /> 
     <DestinationFiles Include="$(Destination)**\*.*" /> 
     <StaleFiles Include="@(DestinationFiles)" Exclude="@(SourceFiles)" /> 
    </ItemGroup>  
    <Message Text="Deleting Stale Files: @(StaleFiles, '%0A')" Condition="'@(StaleFiles->Count())' &gt; 0"/> 
    <Delete Files="@(StaleFiles)"/>  
    </Target>