Visual Studio 사후 빌드 이벤트-상대 디렉토리 위치에 복사


228

성공적으로 빌드되면 출력 디렉토리의 내용을 동일한 "기본" 폴더 아래의 다른 위치에 복사하려고 합니다. 이 상위 폴더는 상대적 부분이며 소스 제어 설정에 따라 달라질 수 있습니다.

사용 가능한 매크로 값 중 일부를 나열했습니다 ...

$ (SolutionDir) = D : \ GlobalDir \ Version \ AppName \ Solution1 \ build

$ (ProjectDir) = D : \ GlobalDir \ Version \ AppName \ 솔루션 1 \ Version \ ProjectA \

Output Dir 내용을 다음 폴더에 복사하고 싶습니다.

D : \ GlobalDir \ Version \ AppName \ Solution2 \ Project \ Dependency

위의 매크로 중 하나에서 기본 위치 "D : \ GlobalDir \ Version \ AppName"을 가져와야합니다. 그러나 매크로 값 중 어느 것도 상위 위치 나열하지 않습니다 .

빌드 후 복사 명령의 기본 위치 어떻게 추출 합니까?

답변:


188

TargetDir 또는 다른 매크로가 올바른 위치를 가리 키지 않으면 ".."디렉토리를 사용하여 폴더 계층 구조로 이동하십시오.

즉. $(SolutionDir)\..\..기본 디렉토리를 얻는 데 사용하십시오 .


모든 매크로 목록은 다음을 참조하십시오.

http://msdn.microsoft.com/en-us/library/c02as0cs.aspx


감사!! 좋은 팁
Merlyn007

293

다음은 프로젝트의 빌드 후 이벤트 명령 행에 넣을 내용입니다.

copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"

편집 : 또는 대상 이름이 프로젝트 이름과 다른 경우.

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"

1
좋은 팁. 나는 따옴표를 잊었다.
Matt Montag

3
내가 잊었 기 때문에 그것은 나를 위해 작동하지 않았습니다 /Y. 전체 명령을 보여 주셔서 감사합니다.
Mark

10
xcopy다음과 같은 소스 폴더의 트리 구조를 유지하면서 와일드 카드 및 적절한 스위치와 함께 사용 하여 유사한 결과를 얻을 수 있습니다.xcopy /i /e /s /y /f "<source>\MyFolder\*" "<destination>\MyFolder"
Dr1Ku

4
소스 부분에서 $ (ProjectName) 대신 $ (TargetName)을 사용하는 것이 좋습니다.
Alexander Schmidt

2
내 이전으로 업데이트하십시오. comment : copy /Y "$(TargetPath)" "$(SolutionDir)somewhere\", 추가 백 슬래시없이 $ (SolutionDir)에 후행 백 슬래시가 포함되므로 (적어도 VS2012에서)
icy


10

나는 이것이 관련이 있다고 생각하지만 msbuild, 배치 파일에서 명령 줄을 사용하여 VS에서 빌드하는 것을 직접 빌드 할 때 문제가 발생했습니다 .

다음과 같은 것을 사용하십시오.

<PostBuildEvent>
  MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
  start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>

(참고 : 복사를 방해하는 권한 문제를 해결하는 데 사용되는 start XCOPY것이 아니라 XCOPY)

배치 파일 에서 msbuild를 실행할 때 매크로가 $(SolutionDir)평가되어 명령이 실패했습니다. 그렇지 않으면 Visual Studio에서 빌드 할 때 제대로 작동했습니다. 사용하여 확인..\XCOPY/verbosity:diagnostic 평가 결과를 표시.

$(ProjectDir)..\똑같은 매크로를 대신 사용하면 두 빌드 시나리오에서 모두 잘 작동하고 전체 경로를 유지합니다.


1
내가 신용을주는 것을 잊었을 경우에 대비 하여 동일한 핵 에 교차 연결 ...
drzaus

Start나를 위해 ( xcopy공유 폴더에서) 일했습니다.
AgentFire

4

msbuild를 직접 사용하는 것은 이치에 맞지 않습니까? 모든 빌드 에서이 작업을 수행하는 경우 끝에 msbuild 작업을 추가 할 수 있습니까? Visual Studio IDE에 표시되지 않은 다른 매크로 값을 찾을 수 없는지 확인하려면 msbuild 옵션을 진단으로 전환하면 사용할 수있는 모든 변수가 표시됩니다. 현재 가치뿐 아니라

Visual Studio 에서이 기능을 켜려면 도구 / 옵션으로 이동 한 다음 트리보기를 프로젝트 및 솔루션이라는 섹션으로 스크롤하고 확장 한 다음 빌드 및 실행을 클릭하십시오. 오른쪽에서 빌드 출력 세부 정보를 지정하는 드롭 다운입니다 를 진단으로 설정하면 사용할 수있는 다른 매크로 값이 표시됩니다.

어느 수준으로 가고 싶은지, 얼마나 복잡한 지 알고 싶기 때문에 아이디어를 얻을 수 있습니다. 최근에는 빌드의 일부로 SQL 코드를 실행하는 빌드 스크립트를 수행했습니다. 좀 더 도움이 필요하거나 샘플 빌드 스크립트가 필요하면 알려주십시오.하지만 빌드가 끝날 때 실행하려는 작은 프로세스 인 경우 전체 msbuild 스크립트를 사용하는 것은 약간 오버 킬입니다. .

그것이 Rihan을 돕는 희망


thx Rihan이지만 VS 2003은 이것을 지원하지 않는 것 같습니다! 물론 포스트 빌드 이벤트에 꽤 만족합니다 ;-)
Preets

나는 그것이 vs2003이라는 것을 몰랐고, 따라서 vs2003이 msbuild 시대 이전이라고 생각하면 msbuild를 가능한 해결책으로 사용하는 것입니까? 답변 주셔서 감사합니다. VS 2003 행운을 빕니다, 나는 VS2005까지 이동 한 후 다시 보이지 않았다
Rihan Meij
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.