2011-08-24 80 views
3

我試圖複製一堆文件的名稱以前綴DR__開頭,但副本必須刪除該前綴。即,DR__foo必須複製爲foo。我想這一點,這是基於文檔(此.chm)中提供的示例:無法獲得MSBuild社區任務RegexReplace工作

<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顯示它)。因此,Copy失敗,因爲沒有指定DestinationFiles。這裏有什麼問題?

編輯: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> 

注意:

  • 我改名爲解決名稱衝突的目標
  • (爲什麼不Visual Studio中檢測到這是一個錯誤?)
  • 我用@(CvParamFiles, '&#xA;')語法漂亮地打印了ItemGroups,它似乎用換行符代替;
  • 我的正則表達式替換了t他的絕對路徑和前綴
  • Count="1"現在傳遞給RegexReplace
相關問題