2013-11-01 3 views
1

소스 트리의 루트를 나타 내기 위해 포함 경로에 $ (ProjectRoot) 변수를 사용하는 많은 프로젝트 파일이 있습니다. 우리는 Visual Studio 환경에서 변수를 정의하여 데스크탑 빌드가 사용중인 tfs 작업 영역에 대한 방법을 찾을 수 있도록합니다.팀 빌드의 msbuild에서 작업 경로를 어떻게 참조 할 수 있습니까?

내 tfs 빌드 정의에서 MSBuild 명령 줄 옵션을 통해 Team Build 환경에서이 변수를 정의하고 싶지만 작동하는 방법을 찾지 못하는 것 같습니다. 나는 변수리스트를 가지고 대답 (List of msbuild properties TFS passes to a build script)을 발견했으며 유망한 SolutionRoot를 보았다.

내 빌드 정의에 MSBuild Arguments/p:ProjectRoot=$(SolutionRoot)을 넣으면 ProjectRoot가 비어있게됩니다. D:\Builds\18\TfsProject\BuildDef\src\

팀 빌드에서 작업 소스의 루트 값으로 내 변수를 정의하는 방법이 있습니까?

참고 : TFS2010에서 이것을 알아 내려고했지만 결국 BuildProcessTemplate을 수정하여 해당 컨텍스트에서 사용할 수있는 SourcesDirectory 변수를 사용하여 변수를 정의했습니다. 수정없이 TFS2013에서 새 템플릿을 사용하기를 바라고 다른 템플릿을 사용한다고 생각했지만 여전히 난처한 상황입니다.

업데이트 : 내가 역 참조하고있는 변수가 실제로 msbuild로 전달되면 내 MSBuild 인수에서 사용한 구문이 작동합니다. 내가 언급 한 다른 게시물의 목록은 더 이상 유효하지 않은 것 같습니다. 자세한 팀 빌드 로그를 보면 Team Build의 msbuild에 전달되는 유일한 변수는 OutDir, BuildId, BuildLabel, BuildTimestamp, BuildSourceVersion 및 BuildDefinition입니다. 그 중 아무도 내가 현재의 msbuild 스크립트가 빌드 시간에 필요한 정보를 제공하지 않기 때문에 모든 프로젝트 파일을 다시 작업하거나 계속 사용하고있는 BuildProcessTemplate 수정 작업을 계속할 수 밖에 없습니다. 누군가가 여기에 더 나은 대답을 함께하지 않는 한.

답변

0

다른 속성을 사용하여 속성을 설정하십시오. 조건이 비어있는 경우에만 설정하려면 조건을 사용하십시오. TFS2013을 사용하는 경우

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="xxxxxxxxxxxx"> 


    <PropertyGroup> 
     <ProjectRoot Condition="$(ProjectRoot)==''"/>$(SolutionRoot)</ProjectRoot> 
    </PropertyGroup>  
+0

내가 사용할 수있는 값을 필요로하는 프로젝트 파일의 점수를 편집하고 싶다면 그렇게 할 수 있습니다. (그리고 우리가 오타를 수정한다면 : ==, not =가되어야하고, ProjectRoot 태그의 여는 괄호 앞에 슬래쉬가 있어야합니다. 5 일 지금은 그렇게 ...) –

+1

나는 ==을 고쳤다. 나는 PropertyGroup의 메모리에서 갈 생각이었습니다. 예, 파이퍼에게 돈을 지불해야 할 수도 있습니다. – granadaCoder

관련 문제