2012-03-02 6 views
2

우리 회사는 현재 Team Build 2010을 설정 중이며 워크 플로 활동을 사용하여 현재 구축중인 솔루션에 대한 정확한 로컬 경로를 검색하려고합니다. 나는이 가치를 얻는 방법을 찾지 못했고, 어떻게 (사용자 정의 활동을 작성하지 않고) 어떻게 알 수 있습니까?솔루션 경로 검색 중?

서버 항목에서 변환 작업을 사용할 수 있으므로 서버 경로 또는 로컬 경로 중 하나만 있으면 충분합니다 (예 : $/TeamProject/Branch/OurProject 또는 C:\TeamBuild\src\path\to\branch\OurProject).

이 경로가 필요한 이유는 버전 정보 파일을 업데이트하기위한 것이므로 현재 솔루션을 빌드 할 때만 수행해야하며 파일 이름도 동일해야합니다 (예 : AssemblyInfo.cs).

similar question에서 솔루션은 매개 변수를 정의하는 것이지만이 정보는 빌드되는 솔루션에만 해당되며 일부 외부 경로가 아니기 때문에이 정보를 검색 할 수 있기를 바랍니다.

답변

4

아무 것도 추가하지 않고이 특정 정보를 검색 할 수 있습니다. 빌드 프로세스 템플릿 내에서 MSBuild가 중단되는 위치로 이동하면 빌드 할 솔루션이 localProject 문자열로 설정됩니다.
여기에는 TFS가 SLN을 다운로드 한 로컬 경로 (예 : C:\TeamBuild\src\path\to\branch\OurProject\OurProject.sln)가 포함됩니다.

열고 XAML과로 이동 : 당신이 선택하면

Run On Agent 
    Try Compile, Test, and Associate Changesets and Work Items 
    Compile, Test, and Associate Changesets and Work Items 
     Try Compile and Test 
     Compile and Test 
      For Each Configuration in BuildSettings.PlatformConfigurations 
      Compile and Test for Configuration 
       If BuildSettings.HasProjectsToBuild 
       For Each Project in BuildSettings.ProjectsToBuild 
        Try to Compile the Project 
        Compile the Project 
         Run MSBuild for Project 

Run MSBuild for Project &는 당신이 그것을 볼 F4했다. 당신은 당신이

To : solutionPath
Value : Path.GetDirectoryName(localProject)

+3

실제로 필요한 정보를 찾았습니다. 각 작업 폴더는 Workspace.Folders (목록의 각 항목에 대한 LocalItem 속성)에서 검색 할 수 있습니다. 건물 이전에 정보가 필요했습니다. 그러나이 정보는 유사한 문제 (NUnit 테스트 용 테스트 어셈블리 정의)에 대해 나에게 매우 유용하다는 것이 입증되었습니다. –

+0

솔루션이 아닌 프로젝트를 빌드하는 경우이 방법은 실패합니다. 'localProject' 변수는이 시나리오의 솔루션 파일이 아닌 프로젝트 파일의 경로 (예 : * .csproj)로 설정됩니다. TFS 2012의 –

+0

나는 "SourcesDirectory"를 사용했다. "SourcesDirectory"는 컴파일 할 프로젝트 목록을 반복 할 때 해당 항목의 폴더를 보여줍니다. "InvokeProcess nuger restore"작업을 시도 할 때 SourcesDirectory 속성이 도움이되었습니다. – Neville

2
  1. TFS Community Build Extensions을 보았습니까? 어셈블리 버전을 제공합니까?

  2. SourcesDirectory이라는 변수를 사용하여 빌드 서버에서 현재 소스 디렉토리를 가져올 수 있습니다. ConvertWorkspaceItem 활동을 사용하여 서버 경로와 로컬 경로간에 변환 할 수도 있습니다.

블로그 게시물이 모두 here입니다.

+0

예, 우리가 사용하는 TFS로 Run MSBuild for Project 새로운 Assign 활동에서 다른 문자열 변수 빌드 프로세스 템플릿에서 solutionPath & 삽입을 정의 할 수 있습니다 후 무엇을 검색하기 위해

Community Build Extensions, 우리가 사용하고자하는 어셈블리 버전 활동입니다. 'SourcesDirectory'는'$ (SourcesDirectory) \ branch \ Dir1''$ (SourcesDirectory) \ branch \ Dir2'의 일부분에만 버전을 설정하고자하는 디렉토리 구조 위의 루트를 가리키고 있습니다. '$ (SourcesDirectory) \ branch \ Dir3'이 아닙니다. 물론'build'는 빌드 정의에 따라 다를 수 있습니다. 디렉토리 구조는 실제로 우리의 현재 솔루션 구조를 따르지 않습니다. 일부 시간 동안 진화했기 때문에 현재로서는 해결할 수는 있지만 할 수는 없기 때문입니다. –

+0

이 표현식에서 Path를 함께 연결하기 위해'Path.Combine'을 사용하거나 그것을 쏟아내는 다른'Path' 함수를 사용합니다. – DaveShaw

+0

예,하지만 "두 번째 부분"을 검색하는 방법을 찾지 못했습니다. 더 구체적으로, 빌드 정의에서 정의 된 Workspace 경로를 얻는 방법이 있어야합니다.그러나 나는 그 속성들을 깊이 들여다 볼 방법을 찾지 못했습니다. –