2011-08-24 3 views
3

이름이 접두사 DR__으로 시작하는 파일들을 복사하려고하는데 사본에 해당 접두사가 제거되어 있어야합니다. 즉, DR__foofoo으로 복사해야합니다.MSBuild 커뮤니티 작업을 가져올 수 없습니다. RegexReplace to work

<Target Name="CopyAuxiliaryFiles"> 
    <MakeDir Directories="$(TargetDir)Parameters" Condition="!Exists('$(TargetDir)Parameters')" /> 
    <ItemGroup> 
     <ContextVisionParameterFiles Include="$(SolutionDir)CVParameters\DR__*" /> 
    </ItemGroup> 
    <Message Text="Files to copy and rename: @(ContextVisionParameterFiles)"/> 
    <RegexReplace Input="@(ContextVisionParametersFiles)" Expression="DR__" Replacement=""> 
     <Output ItemName ="DestinationFullPath" TaskParameter="Output" /> 
    </RegexReplace> 
    <Message Text="Renamed Files: @(DestinationFullPath)"/> 
    <Copy SourceFiles="@(ContextVisionParameterFiles)" DestinationFiles="@(DestinationFullPath)" /> 
    </Target> 

DestinationFullPath가 비어 나오는 (또는 내가 Message 함께 표시 할 때 내가 볼거야) : 나는 문서합니다 (.CHM)에서 제공하는 예제를 기반으로하는이, 노력하고있어. 따라서 DestinationFiles이 지정되어 있지 않으므로 Copy이 실패합니다. 여기 뭐가 잘못 됐니?

편집 : ContextVisionParameterFiles이 비어 있지,이 포함

D:\SVN.DRA.WorkingCopy\CVParameters\DR__big_bone.alut;D:\SVN.DRA.WorkingCopy\CVParameters\DR__big_medium.gop

그들은 실제로 40 개 파일,하지만 나는 명확

답변

2

을 위해 그것을 손질 알았어요! 그것은 어리석은 오류와 겉으로보기에는 강제적 인 매개 변수의 조합 인 것으로 보인다. 처음에는 CopyAuxiliaryFiles이라는 두 가지 목표가있었습니다. 두 번째는 Count 매개 변수가 필요합니다.

최종, 작업 버전 :

<Target Name="CopyCvParameters"> 
    <ItemGroup> 
     <CvParamFiles Include="$(SolutionDir)CVParameters\DR__*" /> 
    </ItemGroup> 
    <Message Text="Input:&#xA;@(CvParamFiles, '&#xA;')"/> 
    <!-- Replaces first occurance of "foo." with empty string--> 
    <RegexReplace Input="@(CvParamFiles)" Expression="^.*DR__" Replacement="$(TargetDir)Parameters\" Count="1"> 
     <Output ItemName ="RenamedCvParamFiles" TaskParameter="Output" /> 
    </RegexReplace> 
    <Message Text="&#xA;Output RenamedCvParamFiles:&#xA;@(RenamedCvParamFiles, '&#xA;')" /> 
    <Copy SourceFiles="@(CvParamFiles)" DestinationFiles="@(RenamedCvParamFiles)" SkipUnchangedFiles="True" /> 
    </Target> 

주의한다 :

  • 내가 이름 충돌 해결하기 위해 대상 이름
  • (비주얼 스튜디오가 오류로 감지하지 못하는 이유는 무엇입니까?)
  • 구문을 사용하여 ItemGroups를 인쇄했습니다. 줄 바꿈으로 ;을 대체하는 것으로 보입니다.
  • 내 정규 표현식 대신 t 그는 절대 경로와 접두어
  • Count="1"을 이제 RegexReplace로 전달합니다.
관련 문제