2008-09-18 8 views
7

재정의 된 빌드 대상을 외부 파일에 저장하고 해당 대상 파일을 TFSBuild.proj에 포함하려고합니다. 핵심 설정 단계가 있으며 마법사가 만든 TFSBuild.proj에 가져 오기 줄을 추가하기 만하면 이러한 추가 단계를 얻으려고합니다.TFSBuild.proj 및 외부 대상 가져 오기

<Import Project="$(SolutionRoot)/libs/my.team.build/my.team.build.targets"/> 

우리 때문에 가져 오기 문이 확인되는 시점에서 $(SolutionRoot)의 모든 파일을 가져 오기를 가질 수는 소스 저장소에서 가져올 수 없습니다. TFS가 다른 파일없이 먼저 TFSBuild.proj을 사용하고있는 것 같습니다.

조건부 가져 오기를 추가하더라도 소스 컨트롤의 버전은 가져올 수 없습니다. 디스크에 이미있는 이전 버전을 가져옵니다.

소스를 사용하여 빌드 타겟을 저장하는 것을 포기할 수 있지만 소스 트리를 벗어나는 첫 번째 종속성이므로 우리는 꺼려합니다.

하는 하나 방법이있다 : 그 Import 문이 제대로 평가 있도록

  1. 에게 팀 빌드는 몇 가지 더 많은 파일을 아래로 끌어 오기가?
  2. AfterCompile과 같은 팀 빌드 대상을 Import 이외의 방법으로 덮어 씁니까?
  3. 빌드하려고하는 소스 아래에 보관되는 빌드 빌드에서 궁극적으로 빌드 대상을 실행 하시겠습니까? TFS 빌드가 아닌 해당 지역의 개발 머신에서 실행중인 경우 대상에만 실행해야하는 경우

답변

16

팀 빌드에는 Team Build Configuration 폴더 (TFSBuild.proj가있는 폴더)의 모든 항목이 버전 제어에서 다운로드되는 "부트 스트랩"단계가 있습니다. 빌드 에이전트가 TFSBuild.proj를 실행하도록 지시하는 MSBuild.exe를 호출하기 전에 빌드 에이전트에서이 작업을 수행합니다.

당신은 SolutionRoot 아래에서 대상 파일을 이동하고 TFSBuild.proj 당신이 다음

<Import Project="myTeamBuild.targets"/> 
즉 상대 import 문을 사용하여 TFSBuild.proj 파일에서 가져올 수있을 것입니다 파일을 함께 구성 폴더에 배치하면

이러한 대상이 추가 사용자 지정 MSBuild 작업 어셈블리에 의존하는 경우 TFSBuild.proj 파일과 동일한 폴더에 포함 할 수도 있으므로 상대 경로를 사용하여 쉽게 참조 할 수 있습니다.

TFS2008에서 빌드 구성 폴더의 기본 설정은 $/TeamProject/TeamBuildTypes입니다. 그러나 반드시 그럴 필요는 없습니다. 실제로 솔루션 내부에있는 폴더에 살 수 있으며 Team Build 전용 솔루션의 프로젝트 일 수도 있습니다. 이것은 빌드의 분기를 쉽게하는 것을 포함하여 몇 가지 장점이 있습니다. 따라서 나는 보통 내 빌드는이 같은 폴더에있는 한 :

$/TeamProject/main/MySolution/TeamBuild 

는 또한 기본적으로 빌드의 부트 스트랩 단계에서 빌드 에이전트는 빌드 구성 폴더에있는 파일을 다운로드 및 것이다 않습니다 하위 폴더로 재귀 적으로 이동하지 않아야합니다. 부트 스트랩 단계에서 하위 폴더에 파일을 포함 시키려면 빌드 에이전트 컴퓨터 (% ProgramFiles % \ Visual Studio 9.0 \ Common7 \ IDE에 있음)의 tfsbuildserver.exe.config 파일의 appSettings에 다음 등록 정보를 설정할 수 있습니다 \ PrivateAssemblies) 여러 빌드 에이전트가 있다면 당신은 모든 시스템에이 설정을 설정하는 것을 기억해야 할 것, 그리고 그 빌드 에이전트가 수행 모든 빌드에 영향을 미칠 것이라고

<add key="ConfigurationFolderRecursionType" value="Full" /> 

주 - 그래서 정말 최상이다 가능한 경우 빌드 구성 폴더의 루트에 파일을 보관하십시오.

행운을 빕니다,

마틴.

+0

마틴 ... 당신은 내 영웅입니다. 질문 2 번, 유효한 대답이있는 유일한 2 번. 너 락! –

+4

부트 스트랩 중에 다른 폴더 경로에서 TFS를 다운로드 할 수 있습니까? 내 TFSBuild.proj가 실행되어야하는 모든 사용자 지정 작업을 포함하는 Common.targets 파일이 있지만 여러 빌드 정의 (정의 당 하나의 폴더)가 주어지면 빌드 정의와 같은 수준의 별도 폴더에 위치합니다 . 그것 없이는 빌드가 즉시 실패합니다. –

1

, 당신은 빌드 자체의 폴더에 대상 파일을 넣고 그것을 참조 할 수 있습니다 :

<Import Project="$(MSBuildProjectDirectory)\my.team.build.targets.proj" /> 
모든 빌드에 대한 목표를 실행하려는 경우 개별 프로젝트 같은 것을 추가하여 참조 할 수 있도록

그러나, 당신은 그것을 설정할 수 있습니다 : 우리는 실제로이 두 가지를 사용하여 내 프로젝트에

<Import Project="$(SolutionRoot)/libs/my.team.build/my.team.build.targets" Condition="Exists('$(SolutionRoot)/libs/my.team.build/my.team.build.targets')" /> 

을의 먼저 허락하다 우리는 야간 빌드를 사용자 정의하여 전체 솔루션 컴파일을 실행하기 전후에 추가 단계를 수행 할 수 있도록하고, 두 번째 프로젝트는 프로젝트 별 사용자 정의를 허용합니다.

+2

첫 번째 옵션은 대상이 소스 제어 외부에 있어야하며 두 번째 옵션은 현재 빌드의 대상을 실행하지 않아야합니다. 오직 이전. 소스가 풀리기 전에는 여전히 가져 오기를 수행합니다. – Mark

0

오버로드 대상 파일을 가져 와서 TeamBuildOverrides.targets와 같은 것으로 호출하고이를 소스 제어의 TFSBuild.proj가 빌드 유형과 동일한 폴더에 넣으면이 파일이 먼저 가져와 사용할 수 있습니다. TFSBuild.proj 파일로 가져옵니다. 기본적으로 TFSBuild.proj 파일은 프로젝트의 루트 폴더 바로 아래에있는 소스 제어의 TeamBuildTypes 폴더에 추가됩니다.

은 TFSBuild.proj 파일에 다음 import 문을 사용

<Import Project="$(MSBuildProjectDirectory)\TeamBuildOverrides.targets" /> 

당신이 당신의 TFSBuild.proj 파일에 중복 무시가 없거나 수입 대체 해고되지 않습니다 있는지 확인하십시오.