1

C# プロジェクトのビルド後のイベントに robocopy ファイルを追加しました。X64 リリースおよびデバッグ ビルドは、X86 デバッグと同様に正常にビルドされますが、X86 リリース オプションは Get-Parent-Device.exe ファイルをターゲットにコピーしません。

なんで?

注:その特定の構成だけのために、いつでもステップを追加してファイルを手動でコピーすることができます。これで問題は「解決」しますが、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

ビルド手順のスクリーンショットを次に示します。

ビジュアル ビルド プロの手順

/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