2012-10-31 6 views
2

TFS 2008 (SP1)을 사용했을 때 빌드가 실행되는 이유가 포함 된 "이유"MSBuild 속성에 액세스 할 수있었습니다. 이것은 빌드가 시작하자마자 사용할 수 있었으므로 가져올 작업/대상이 없었습니다. 이제 우리는 TFS 2010 (및 워크 플로가 아닌 MSBuild/업그레이드 템플릿)을 사용하고 있으며이 속성은 더 이상 채워지지 않습니다. IBuildDetail에서 정보를 검색하는 사용자 지정 작업을 작성할 수 있지만 즉시 내 MSBuild 스크립트에서 사용할 수있는 속성이 있습니까? 빌드 이유에 따라 조건부 MSBuild 스크립트 가져 오기를 수행 할 수 있었지만이 작업/대상을 사용하여 이유를 가져와야하는 경우에는 작동하지 않습니다.TFS 2010의 "Reason"속성에 발생한 문제 빌드

답변

1

아직 MSBuild 스크립트를 사용하고 있으므로 업그레이드 템플릿을 사용하고 있다고 가정합니다. 템플리트가 현재 빌드 이유를 취하여 구성 폴더 활동을 위해 TfsBuild를 실행하여 MSBuild로 전달하도록 업그레이드 템플리트를 복제/편집 또는 수정할 수 있습니다. Visual Studio에서 편집 할 템플릿을 열고 다음을 수행하십시오.

실행시 에이전트 활동을 선택하고 변수 탭으로 이동하십시오. 빌드 이유를 저장할 새 변수를 만들고 IBuildDetail의 정보를 사용하여 기본값을 채 웁니다. 변수의 목록에 다음과 같이 뭔가를 추가

Name: currentBuildReason 
Variable type: String 
Scope: Run On Agent 
Default: BuildDetail.Reason.ToString() 

다음, 구성 폴더 활동에 대한 실행 TfsBuild 등록 정보 대화 상자를 클릭합니다. CommandLineArgument elipses를 선택하여 TFSBuild에 인수를 전달하는 대화 상자를 엽니 다.

MSBuildArguments 

이제 (기존 MSBuildArguments을 통과 여전히 등) 명령 줄 인수에 현재 빌드의 이유를 추가 할 수 있습니다, 비슷한 이에 :

String.Format("/p:CurrentBuildReason={0} {1}", currentBuildReason, MSBuildArguments) 

확인을 클릭 당신은 아마 하나 개의 변수가 나열 대화 상자를 닫습니다. 그러면 현재 빌드 이유가 CurrentBuildReason이라는 새 인수로 전달되며 MSBuild 스크립트에서 $ (CurrentBuildReason)로 참조 될 수 있습니다.

업그레이드 템플릿을 저장하고 체크인하십시오. 템플릿을 빌드 정의에 지정하십시오. 해당 정의에서 사용되는 MSBuild 스크립트는 위에서 설명한대로 변수를 사용할 수 있습니다.