은 전체 폴더를 복사하려고하지만 난이 작업을 수행 할 때MSBuild를 복사 전체 폴더
는<Copy SourceFiles="$(TargetDir)\*.*" DestinationFolder="$(BuildOutput)\SomeDir" />
복사본이 작업을 수행하려고 시도 : 사본에 c : \ 소스 \ *. * C : \ 대상 \ SomeDir을 \ *. *이고 "잘못된 문자"로 인해 실패합니다.
은 전체 폴더를 복사하려고하지만 난이 작업을 수행 할 때MSBuild를 복사 전체 폴더
는<Copy SourceFiles="$(TargetDir)\*.*" DestinationFolder="$(BuildOutput)\SomeDir" />
복사본이 작업을 수행하려고 시도 : 사본에 c : \ 소스 \ *. * C : \ 대상 \ SomeDir을 \ *. *이고 "잘못된 문자"로 인해 실패합니다.
SourceFiles에 대해 명시 적으로 ItemGroup을 지정하십시오.
<ItemGroup>
<_CopyItems Include="$(TargetDir)\*.*" />
</ItemGroup>
<Copy
SourceFiles="@(_CopyItems)"
DestinationFolder="$(BuildOutput)\SomeDir"
/>
_CopyItems는 항목 유형이므로 '$'대신 '@'기호를 사용하여 참조됩니다.
'
MSDN 설명서를 보면 SourceFiles 매개 변수에 ITaskItem [] 값이 필요하다고 생각합니다. MSDN MSBuild Copy Task
위 링크의 마지막 예는 폴더 구조를 유지하면서 한 디렉토리에서 다른 디렉토리로 재귀 복사를하는 것입니다.
복사 파일은 바이러스 백신 프로그램 및 하위 디렉토리가 대상 디렉토리의 하위 폴더에 소스 디렉토리의 하위 폴더를 배치 할 수 있도록, 하위 폴더를 존중 복사에게 작업을 요청합니다 $(OutputPath)\%(RecursiveDir)
지정
<ItemGroup>
<SomeAppStuff Include="$(SolutionDir)\ProjectXXX\bins\**\*.*" />
</ItemGroup>
<Copy
SourceFiles="@(SomeAppStaff)"
DestinationFolder="$(OutputPath)\%(RecursiveDir)"
SkipUnchangedFiles="true"
OverwriteReadOnlyFiles="true"
Retries="3"
RetryDelayMilliseconds="300"/>
를 처리하는 다음 코드로 수행 할 수 있습니다 .
SkipUnchangedFiles
은 RAM이 충분할 때 자주 사용하는 파일에 대해 IO가 IO를 최적화하므로 메모리가 충분한 컴퓨터에서 빌드 속도가 빨라집니다. 빌드 할 때
Retries
및 RetryDelayMilliseconds
는 SSD 드라이브가 거의 경우 B) 바이러스 백신 소프트웨어에서 실패하지 않습니다, 가) 압축 된 NTFS 파일 시스템 관련 문제를 처리합니다.
어떤 경로 \의 % (RecursiveDir)에'DestinationFolder' 설정의 파급 효과는? 그것은 의도 된 위치에 디렉토리를 놓거나, 재귀 경로를 따라 가장 멀리 떨어져있는 것입니다. –
kayleeFrye_onDeck, 소스 디렉토리의 하위 폴더에 하위 디렉토리를 배치합니다. 제거하려면 원본 디렉토리의 모든 하위 폴더 내용이 배치됩니다. 대상 디렉토리로. –
고마워, @ drweb86! –
비슷한 질문이 여기에 요청되었습니다. http://stackoverflow.com/questions/119271/copy-all-files-and-folders-using-msbuild – joshhendo