在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
(应该如何)。
如何解决?
答案 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.*
:
答案 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'))" />
工作正常。