Почему Robocopy пропускает файл во время сборки? - PullRequest
0 голосов
/ 25 сентября 2018

Я добавил файл robocopy к своему событию после сборки в моем проекте на C #.X64 Release и Debug строят нормально, как и X86 Debug, однако опция X86 Release НЕ копирует файл Get-Parent-Device.exe в целевую папку.

Почему?

Примечание: IЯ всегда могу просто добавить шаг и скопировать файл вручную только для этой конкретной конфигурации, и это "решит" мою проблему, однако я хочу понять, какая проблема возникла у robocopy.Источник и назначение в порядке, разрешения в порядке, просто X86 / Release не работает.

Что интересно, если я щелкну правой кнопкой мыши по решению и выберу сборку, robocopy будет работать на этой конфигурации.Что не работает, так это если я использую Visual Build Professional и собираю все конфигурации проекта.

Вот файл log +:

-------------------------------------------------------------------------------
   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 steps

Я видел рекомендацию использовать / 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                              
     -------------------------------------------------------------------------------

1 Ответ

0 голосов
/ 25 сентября 2018

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 секунды, прежде чем продолжится ...

...