无法让 MSBuild 社区任务 RegexReplace 工作
Posted
技术标签:
【中文标题】无法让 MSBuild 社区任务 RegexReplace 工作【英文标题】:Can't get MSBuild Community Task RegexReplace to work 【发布时间】:2011-11-02 21:13:39 【问题描述】:我正在尝试复制一堆名称以前缀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】:知道了!它似乎是一个愚蠢的错误和一个看似强制的参数的组合。至于第一个,有两个目标,称为CopyAuxiliaryFiles
。至于第二个,好像需要Count
参数。
最终的工作版本:
<Target Name="CopyCvParameters">
<ItemGroup>
<CvParamFiles Include="$(SolutionDir)CVParameters\DR__*" />
</ItemGroup>
<Message Text="Input:
@(CvParamFiles, '
')"/>
<!-- 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="
Output RenamedCvParamFiles:
@(RenamedCvParamFiles, '
')" />
<Copy SourceFiles="@(CvParamFiles)" DestinationFiles="@(RenamedCvParamFiles)" SkipUnchangedFiles="True" />
</Target>
注意:
我重命名了 Target 以解决名称冲突(为什么 Visual Studio 没有将其检测为错误?) 我用@(CvParamFiles, '&#xA;')
语法漂亮地打印了 ItemGroups,它似乎用换行符替换了 ;
我的正则表达式替换了绝对路径和前缀
Count="1"
现在传递给 RegexReplace
【讨论】:
以上是关于无法让 MSBuild 社区任务 RegexReplace 工作的主要内容,如果未能解决你的问题,请参考以下文章
在Visual Studio中的MSBuild社区任务BeforeBuild步骤期间找不到路径中的xsd.exe
为啥 Msbuild 任务无法部署数据库,但 Exec 工作正常
给定相对路径时,如何让 MSBUILD 评估和打印完整路径?