1

我在 C# 项目的构建后事件中添加了一个 robocopy 文件。X64 Release 和 Debug 构建良好,X86 Debug 也是如此,但是 X86 Release 选项不会将 Get-Parent-Device.exe 文件复制到目标。

为什么?

注意:我总是可以为特定配置手动添加一个步骤并复制文件,这将“解决”我的问题,但是我想了解 robocopy 有什么问题。源和目标都很好,权限也很好,只是 X86/Release 不起作用。

有趣的是,如果我右键单击解决方案并选择构建,robocopy 会在该配置上工作。如果我使用 Visual Build Professional 并构建项目的所有配置,则不起作用。

这是日志+文件:

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows                              
-------------------------------------------------------------------------------

  Started : Tuesday, September 25, 2018 10:16:57 AM
   Source : C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\Get-Parent-Device\Release\
     Dest : C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\MyProject\bin\x86\Release\

    Files : Get-Parent-Device.exe

  Options : /V /DCOPY:DA /COPY:DAT /IS /R:1000000 /W:30 

------------------------------------------------------------------------------

                       0    C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\Get-Parent-Device\Release\

------------------------------------------------------------------------------

               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :         1         0         1         0         0         0
   Files :         0         0         0         0         0         0
   Bytes :         0         0         0         0         0         0
   Times :   0:00:00   0:00:00                       0:00:00   0:00:00
   Ended : Tuesday, September 25, 2018 10:16:57 AM

以下是构建后事件的相关步骤:

robocopy /V /IS /log+:"$(TargetDir)robo.log" "$(ProjectDir)..\Get-Parent-Device\Release" $(TargetDir) Get-Parent-Device.exe
robocopy "$(ProjectDir)..\packages\System.Data.SQLite.Core.1.0.108.0\build\net46\$(PlatformName)" $(TargetDir) SQLite.Interop.dll
exit 0

这是构建步骤的屏幕截图。

Visual Build Pro 步骤

我看到了使用 /MIR 的建议,但我不想镜像,只需复制该特定文件即可。遗憾的是,/log、/log+ 和 /v 没有提供非常详细的信息来说明为什么在这个特定的实例中,robocopy 觉得不需要复制文件。

我不喜欢掩盖问题或理解技术问题,因此我在这里发帖。我担心的是,如果我不能依赖 Robocopy,那么在 Visual Studio 中使用它可能是一个糟糕的选择。我需要一份可靠的副本,而不是不可靠的副本。

XCOPY 试用版:

那没有用。到目前为止,最好的解决方案仍然是针对该特定配置的 Visual Build Pro 指令。:-(

   PostBuildEvent:
     "C:\Program Files\Editors\VisBuildPro9\Tools\signtool.exe" sign /f  "C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\MyProject\jmrDigicert-2017-NoChain.pfx" /p 1234 /t http://timestamp.verisign.com/scripts/timstamp.dll "C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\MyProject\bin\x64\Debug\MyProject.exe"
     xcopy /i "C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\MyProject\..\Get-Parent-Device\Release\Get-Parent-Device.exe" C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\MyProject\bin\x64\Debug\
     robocopy "C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\MyProject\..\packages\System.Data.SQLite.Core.1.0.108.0\build\net46\x64" C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\MyProject\bin\x64\Debug\ SQLite.Interop.dll
     robocopy "C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\MyProject\..\..\Redistributables" C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\MyProject\bin\x64\Debug\ AMBackup.exe
     exit 0

     Done Adding Additional Store
     Successfully signed and timestamped: C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\MyProject\bin\x64\Debug\MyProject.exe

     C:\Users\Sarah\Source\Workspaces\MyProject\Flavor\Net\1.0\App\MyProject\..\Get-Parent-Device\Release\Get-Parent-Device.exe
     1 File(s) copied

     -------------------------------------------------------------------------------
        ROBOCOPY     ::     Robust File Copy for Windows                              
     -------------------------------------------------------------------------------
4

1 回答 1

0

Robocopy 旨在仅复制更改的文件,但您添加的选项 /IS 假设复制您喜欢的任何内容。尝试添加参数 /IT (包括“调整”文件),但根据我的经验,它也不可靠。

这篇文章如何强制 Robocopy 覆盖文件?证实我的发现。他们的解决方案与我的相同:使用XCOPY

https://superuser.com/questions/314503/what-does-robocopy-mean-by-tweaked-lonely-and-extra/445137#445137表显示了 robocopy 如何对文件进行分组。

编辑:
您收到的错误消息通常是源中的“文件不存在”。
由于您的 XCOPY 测试也失败了,所以我 100% 确定该文件不存在。
请参阅下面的示例:

C:\>dir x
 Volume in drive C has no label.
 Volume Serial Number is CE46-5CC1

 Directory of C:\x

25.09.2018  23:37    <DIR>          .
25.09.2018  23:37    <DIR>          ..
27.07.2016  15:09             1 209 somefile
               1 File(s)          1 209 bytes
               2 Dir(s)  125 137 285 120 bytes free

C:\>robocopy /IS x y somefile

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  Started : tirsdag 25. september 2018 23:38:07
   Source : C:\x\
     Dest : C:\y\

    Files : somefile

  Options : /DCOPY:DA /COPY:DAT /IS /R:1000000 /W:30

------------------------------------------------------------------------------

                           1    C:\x\
100%        New File                1209        somefile

------------------------------------------------------------------------------

               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :         1         0         1         0         0         0
   Files :         1         1         0         0         0         0
   Bytes :     1.1 k     1.1 k         0         0         0         0
   Times :   0:00:00   0:00:00                       0:00:00   0:00:00


   Speed :             1209000 Bytes/sec.
   Speed :              69.179 MegaBytes/min.
   Ended : tirsdag 25. september 2018 23:38:07


C:\>robocopy /IS x y somefile

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  Started : tirsdag 25. september 2018 23:38:13
   Source : C:\x\
     Dest : C:\y\

    Files : somefile

  Options : /DCOPY:DA /COPY:DAT /IS /R:1000000 /W:30

------------------------------------------------------------------------------

                           1    C:\x\
100%        Same                    1209        somefile

------------------------------------------------------------------------------

               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :         1         0         1         0         0         0
   Files :         1         1         0         0         0         0
   Bytes :     1.1 k     1.1 k         0         0         0         0
   Times :   0:00:00   0:00:00                       0:00:00   0:00:00


   Speed :             1209000 Bytes/sec.
   Speed :              69.179 MegaBytes/min.
   Ended : tirsdag 25. september 2018 23:38:13


C:\>robocopy /IS x y somefilex

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  Started : tirsdag 25. september 2018 23:38:17
   Source : C:\x\
     Dest : C:\y\

    Files : somefilex

  Options : /DCOPY:DA /COPY:DAT /IS /R:1000000 /W:30

------------------------------------------------------------------------------

                           0    C:\x\

------------------------------------------------------------------------------

               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :         1         0         1         0         0         0
   Files :         0         0         0         0         0         0
   Bytes :         0         0         0         0         0         0
   Times :   0:00:00   0:00:00                       0:00:00   0:00:00
   Ended : tirsdag 25. september 2018 23:38:17


C:\>

在 Visual Studio 中构建时遇到了类似的问题。但是我不得不改变构建依赖和构建顺序来解决它。

您可以尝试在后期构建中添加一个小的延迟,尝试添加如下:

ping 127.0.0.1 -n 3 > nul

它会在继续之前暂停 2 秒...

于 2018-09-25T18:39:12.200 回答