문제

재정의된 빌드 대상을 외부 파일에 저장하고 해당 대상 파일을 TFSBuild.proj에 포함하려고 합니다.발생하는 핵심 세트 단계가 있으며 마법사에서 생성한 TFSBuild.proj에 가져오기 라인을 추가하여 이러한 추가 단계를 가져오고 싶습니다.

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

다음의 어떤 ​​파일도 가져올 수 없습니다. $(SolutionRoot) Import 문의 유효성이 검사될 때 소스가 저장소에서 가져오지 않았기 때문입니다.TFS가 TFSBuild.proj 먼저 다른 파일 없이 .

조건부 가져오기를 추가하더라도 소스 제어의 버전이 있는 경우 가져오지 않습니다.디스크에 이미 존재하는 이전 버전을 가져옵니다.

소스와 함께 해당 빌드 대상을 저장하는 것을 포기할 수 있지만 소스 트리에서 이동하는 것이 첫 번째 종속성이므로 그렇게 하기를 꺼립니다.

다음 중 하나를 수행하는 방법이 있습니까?

  1. 팀 빌드에 파일 몇 개를 더 끌어내리도록 지시하세요. Import 명령문은 올바르게 평가됩니까?
  2. 다음과 같은 팀 빌드 대상을 재정의하십시오. AfterCompile 그 외에 다른 방법으로 Import?
  3. 궁극적으로 빌드하려는 소스 아래에 유지되는 팀 빌드에서 빌드 대상을 실행하시겠습니까?
도움이 되었습니까?

해결책

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

SolutionRoot 아래에서 대상 파일을 이동하고 TFSBuild.proj 파일과 함께 구성 폴더에 배치하면 상대 가져오기 문(예:

<Import Project="myTeamBuild.targets"/>

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

TFS2008에서 빌드 구성 폴더는 기본적으로 $/TeamProject/TeamBuildTypes 아래에 있지만 반드시 거기에 있을 필요는 없습니다.실제로 솔루션 내부의 폴더에 있을 수 있으며 팀 빌드 전용 솔루션의 프로젝트일 수도 있습니다.이는 빌드 분기를 더 쉽게 만드는 것을 포함하여 여러 가지 장점이 있습니다.따라서 일반적으로 내 빌드는 다음과 같은 폴더에 있습니다.

$/TeamProject/main/MySolution/TeamBuild

또한 기본적으로 빌드의 부트스트랩 단계 동안 빌드 에이전트는 빌드 구성 폴더에 있는 파일만 다운로드하고 하위 폴더로 다시 내려오지 않습니다.부트스트랩 단계 중에 하위 폴더에 파일을 포함시키려면 빌드 에이전트 컴퓨터(%ProgramFiles%\Visual Studio 9.0\Common7\IDE에 있음)에 있는 tfsbuildserver.exe.config 파일의 appSettings에서 다음 속성을 설정할 수 있습니다. \PrivateAssemblies)

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

여러 빌드 에이전트가 있는 경우 모든 머신에서 이 설정을 지정해야 한다는 점을 기억해야 하며 이는 해당 빌드 에이전트가 수행하는 모든 빌드에 영향을 미칩니다. 따라서 파일을 루트에 유지하는 것이 가장 좋습니다. 가능하다면 구성 폴더를 만드세요.

행운을 빌어요,

남자 이름.

다른 팁

TFS가 로컬 개발 컴퓨터가 아닌 빌드를 실행할 때만 대상을 실행해야 하는 경우 대상 파일을 빌드 자체용 폴더에 넣고 다음을 참조할 수 있습니다.

<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')" />

내 프로젝트에서 우리는 실제로 이 두 가지를 모두 사용합니다. 첫 번째를 사용하면 야간 빌드를 사용자 정의하여 전체 솔루션 컴파일을 실행하기 전후에 추가 단계를 수행할 수 있고, 두 번째는 프로젝트별 사용자 정의를 허용합니다.

재정의 대상 파일을 생성하여 TeamBuildOverrides.targets와 같은 이름으로 가져오고 호출하고 빌드 유형에 대해 TFSBuild.proj가 있는 소스 제어의 동일한 폴더에 넣으면 먼저 가져와서 TFSBuild로 가져올 수 있습니다. .proj 파일입니다.기본적으로 TFSBuild.proj 파일은 프로젝트 루트 폴더 바로 아래 소스 제어의 TeamBuildTypes 폴더에 추가됩니다.

TFSBuild.proj 파일에서 다음 import 문을 사용합니다.

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

TFSBuild.proj 파일에 중복된 재정의가 없는지 확인하십시오. 그렇지 않으면 가져온 재정의가 실행되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top