无法使MSBuild社区任务RegexReplace正常工作

3

我正在尝试复制一堆以前缀DR__开头的文件,但是副本必须去除该前缀。也就是说,DR__foo必须被复制为foo。我正在尝试以下方法,它基于文档(.chm)中提供的示例:

<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个文件,但出于清晰起见,我将其缩短了。

1个回答

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进行了格式化,它似乎将;替换为换行符
  • 我的正则表达式替换了绝对路径和前缀
  • Count="1"现在传递给RegexReplace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接