2009-10-01 3 views
8

다른 MSBuild 파일을 호출하는 MSBuild 파일을 설정하려고하는데이 작업을 수행하는 가장 좋은 방법이 무엇인지 궁금합니다.외부 MSBuild 파일을 실행하는 MSBuild 작업

빌드 서버가 MSBuild 파일을 다운로드하는 시나리오에서 사용하고 있습니다.이 파일은 매개 변수에 따라 적절한 두 번째 파일을 실행합니다.

나는 단지 <Exec Command="msbuild.exe ..." /> 작업을 사용할 수 있지만, 그럴 수있는 방법은 해커 일 것 같습니다.

MSBuild를 사용하여 다른 MSBuild 파일을보다 쉽게 ​​사용할 수있는 방법이 있습니까?

답변

13

MSBuild task을 사용하여 다른 MSBuild 프로젝트에서 대상을 빌드 할 수 있습니다.

MSBuild 프로젝트에서 가져온 외부 .targets 파일에 대상을 넣고 CallTarget task을 사용하여 빌드 할 수도 있습니다.

업데이트 : 외부 명령을 실행하려면 Exec task을 사용하십시오.

+0

아! 나는 더 좋은 방법이 있어야한다는 것을 알았다. 전에 MSBuild 작업을 건너 가지 않았습니다. –

+1

MSBuild 작업을 사용하여 외부 파일을 어떻게 실행합니까? 그 방법을 보여줄 수 있습니까? –

2

Adam Oren의 댓글에 대한 응답 : 다음은 외부 파일을 실행하는 예입니다.이 경우 외부 파일을 실행하는 예입니다.이 경우에는 nunit이 실행됩니다. 이 % 22. 당신이 당신의 실행 파일 경로에 공백을 가질 수 있도록 "이란, 탈출 당신은 내가했던 것처럼 변수를 사용할 필요가 없습니다

<Exec Command="%22$(NUnit_Install_Directory)bin\net-2.0\nunit-console.exe%22 
/noshadow @(TestableAssemblies, ' ') /xml 
$(BuildFilesPath)\NCover-NUnit-Results.xml" /> 

입니다,하지만 난 그게 스크립트가 더 휴대용 만드는 것을 찾을 수 있습니다. $ (NUnit_Install_Directory는) 그것은 하나의 MSBuild 프로세스가 건설되고 대한 모든 프로젝트를 알고 있다는 것을 의미한다. 그것은 단지 예뻐 <Exec Command="msbuild.exe .."/>보다는 <MSBuild> 작업을 사용하지 않는 것

<PropertyGroup> 
    <NUnit_Install_Directory>c:\Program Files\NUnit 2.5.3\</NUnit_Install_Directory> 

7

로 정의하고있다 충돌은 없다. 특정 프로젝트를 한 번에 두 개의 스레드로 빌드 할 수 없습니다. "/ m"을 사용하여 빌드하는 경우 대개 중요합니다. 전체 빌드에 대해 하나의 로거 세트가있는 것과 같은 몇 가지 장점이 있습니다.

0
<Target Name="TA"> 
    <CallTarget Targets="TB"/> 
</Target> 

<Target Name="TB"> 
    <Message Text="TB..." /> 
</Target> 
관련 문제