Visual Studio - Build Events에 robocopy를 사용할때 "Invalid Parameter #1" 오류가 발행하는 경우
이상하군요, 단순하게 다음과 같이 빌드 이벤트를 만들었는데,
$(ProjectDir)postBuildScript.bat "$(TargetDir)" $(TargetName)
REM postBuildScript.bat
robocopy %1 d:\temp %2.*
exit 0
빌드 시 오류가 발생합니다.
Error Invalid Parameter #1 : "E:\ConsoleApp1\bin\Debug" d:\temp ConsoleApp1.*"
원인은 지난 글에 쓴 것과 같은 이유인데,
robocopy - ERROR : No Destination Directory Specified.
; https://www.sysnet.pe.kr/2/0/12441
TargetDir이 넘겨주는 값이 "E:\ConsoleApp1\bin\Debug\"와 같이 마지막에 '\' 글자를 포함하고 있기 때문입니다. 하지만 오류 메시지의 출력 결과가 이번에는 다릅니다.
Rebuild started...
1>------ Rebuild All started: Project: ConsoleApp1, Configuration: Debug Any CPU ------
1> ConsoleApp1 -> E:\ConsoleApp1\bin\Debug\ConsoleApp1.dll
1> AnyCPU "E:\ConsoleApp1\bin\Debug\" ConsoleApp1
1>
1> -------------------------------------------------------------------------------
1> ROBOCOPY :: Robust File Copy for Windows
1> -------------------------------------------------------------------------------
1>
1> Started : 03 12월 2020 오전 10:24:53
1> Source -
1> Dest -
1>
1> Files :
1> Options : /DCOPY:DA /COPY:DAT /R:1000000 /W:30
1>
1> ------------------------------------------------------------------------------
1>
1>EXEC : error : Invalid Parameter #1 : "E:\ConsoleApp1\bin\Debug" d:\temp ConsoleApp1.*""
1>
1> Simple Usage :: ROBOCOPY source destination /MIR
1>
1> source :: Source Directory (drive:\path or \\server\share\path).
1> destination :: Destination Dir (drive:\path or \\server\share\path).
1> /MIR :: Mirror a complete directory tree.
1>
1> For more usage information run ROBOCOPY /?
1>
1>
1> **** /MIR can DELETE files as well as copy them !
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(5461,5): error MSB3073: The command "E:\ConsoleApp1\postBuildScript.bat AnyCPU "E:\ConsoleApp1\bin\Debug\" ConsoleApp1
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(5461,5): error MSB3073: " exited with code -1.
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
어쨌든, 이 원인을 고치려면 지난 글에 소개한 3가지 방법 중 하나를 써야 하는데,
$(ProjectDir)postBuildScript.bat "$(TargetDir)" $(TargetName)
TargetDir 경로에 공백이 포함되어 있다면 다음과 같이 마지막에 '\' 문자를 하나 더 추가한 후 겹따옴표로 감쌀 수 있습니다.
$(ProjectDir)postBuildScript.bat $(PlatformName) "$(TargetDir)\" $(TargetName)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]