在 Visual Studio 生成后事件中复制文件

Mar*_*rko 5 xcopy robocopy post-build-event visual-studio-2013

我想在构建过程成功后以给定的文件扩展名递归复制所有文件。

机器人复制

ROBOCOPY %source% %destination% /S *.as?x *.xls? *.mrt
Run Code Online (Sandbox Code Playgroud)

复制

xcopy .\*.as?x %destination% /SY
xcopy .\*.xls? %destination% /SY
xcopy .\*.mrt %destination% /SY
Run Code Online (Sandbox Code Playgroud)

我试图在 Visual Studio 的后期构建部分中插入这两种可能性。RoboCopy 退出并出现错误:错误 1 ​​命令“ROBOCOPY source destination /S *.as?x *.xls? *.mrt”退出,代码为 1。某些文件已复制但复制到错误的文件夹 (_PublishedWebsites)。

xcopy 也会复制到错误的目录 (_PublishedWebsites) 并且也不会复制所有文件。

在命令行中,这两个命令都按预期工作。

更新

我已经更新了我的 robocopy 命令:

ROBOCOPY $(MSBuildProjectDirectory) $(MSBuildProjectDirectory)\..\..\..\EDP\Web\Modules\Invoice\Web /S *.as?x *.xls? *.mrt
Run Code Online (Sandbox Code Playgroud)

现在文件被复制到正确的位置,但 robocopy 的返回码导致 Visual Studio 错误。

这里的帮助下,解决这个

call ROBOCOPY $(MSBuildProjectDirectory) $(MSBuildProjectDirectory)\..\..\..\EDP\Web\Modules\Invoice\Web /S *.as?x *.xls? *.mrt
if %errorlevel% leq 1 exit 0 else exit %errorlevel%
Run Code Online (Sandbox Code Playgroud)

首选方案

<ItemGroup>
    <SourceFiles Include="$(MSBuildProjectDirectory)\**\*.js"/>
    <SourceFiles Include="$(MSBuildProjectDirectory)\**\*.html"/>
    <SourceFiles Include="$(MSBuildProjectDirectory)\**\*.css*"/>
    <SourceFiles Include="$(MSBuildProjectDirectory)\**\*.png"/>
    <SourceFiles Include="$(MSBuildProjectDirectory)\**\*.as?x"/>
</ItemGroup>

<Target Name="AfterBuild">
    <Copy
       SourceFiles="@(SourceFiles)"
       DestinationFiles="@(SourceFiles->'%(MSBuildProjectDirectory)..\..\..\EDP\Web\Modules\DMS\Web\%(RecursiveDir)%(Filename)%(Extension)')"
    />
</Target>
Run Code Online (Sandbox Code Playgroud)