使用MSBuild移动并重命名具有双扩展名的文件

时间:2018-03-21 21:13:11

标签: file msbuild visual-studio-2017 file-rename movefile

在VS MSBuild中,我们将文件组从一个文件夹移动到另一个文件夹:

<ItemGroup>
      <RenameFile Include="Main\App.*" />     
</ItemGroup>    
<Move SourceFiles="@(RenameFile)" DestinationFiles="%(RootDir)%(RenameFile.Directory)NewApp%(RenameFile.Extension)" />

除了一个文件App.exe.config之外,它工作正常,因为它有双重扩展名,而是重命名为NewApp.config而不是NewApp.exe.config(应该如何)。

如何解决?

2 个答案:

答案 0 :(得分:1)

  

使用MSBuild

移动并重命名带有双扩展名的文件

您似乎想要将文件App.*移动并重命名为NewApp.*,但使用MSBuild保留扩展名。您可以使用具有MsBuild Community Tasks任务的RegexReplace

要完成此操作,请将MSBuildTasks nuget包添加到项目中,然后添加以下目标来执行此操作:

  <Target Name="MoveAndRename" AfterTargets="Build">
    <ItemGroup>
      <RenameFile Include="Main\App.*" />
    </ItemGroup>
    <Message Text="Files to copy and rename: @(RenameFile)" />
    <RegexReplace Input="@(RenameFile)" Expression="App." Replacement="NewApp.">
      <Output ItemName="DestinationFullPath" TaskParameter="Output" />
    </RegexReplace>
    <Message Text="Renamed Files: @(DestinationFullPath)" />
    <Move SourceFiles="@(RenameFile)" DestinationFiles="@(DestinationFullPath)" />
  </Target>

使用此目标,所有App.*文件都会被移动并重命名为NewApp.*

enter image description here

答案 1 :(得分:1)

从MSBuild 4.0开始,我们可以使用String Item Functions,例如Replace:

<ItemGroup>
  <RenameFile Include="Main\App.*" />    
</ItemGroup>    
<Message Text="Move: @(RenameFile) -> @(RenameFile -> Replace('App', 'NewApp'))" Importance="High" />
<Move SourceFiles="@(RenameFile)" DestinationFiles="@(RenameFile -> Replace('App', 'NewApp'))" />

工作正常。