2016-10-26 3 views
1

내 궁극적 인 목표는 MSBuild 사전 빌드 이벤트에서 분기 이름 ($ SolutionDirectory의 일부)을 추출한 다음 내 app.config appSettings에 주입하는 것입니다.MSBuild 사전 빌드 단계의 분기 이름 추출

나는 많은 파기를 해오 고 있으며이 문제에 대한 접근법을 실제로 발견하지 못했습니다.

나는 사전 빌드하는 동안 이런 일을 할 수 있도록하고 싶습니다 :

<XmlPoke XmlInputPath="App.config" 
    Query="/configuration/appSettings/add[@key='BuildBranch']/@value" 
    Value="$(Branch)" /> 

사람이 이전에 같은 짓을 했습니까?

답변

0

모두에게 감사드립니다. 대답을 통해 내가 원하는 것을 얻을 수는 없지만, 그것은 나의 필요에 맞는 올바른 방향으로 나를 밀어 붙였다.

<Target Name="AfterBuild"> 
    <XmlPoke Condition=" '$(TeamBuildOutDir)' == '' " XmlInputPath="$(ProjectDir)bin\$(ConfigurationName)\$(TargetName).dll.config" Query="/configuration/appSettings/add[@key='BuildInfo']/@value" Value="$(SolutionDir)" /> 
    <XmlPoke Condition=" '$(TeamBuildOutDir)' != '' " XmlInputPath="$(TeamBuildOutDir)\$(SolutionName)\$(ProjectName)\$(TargetName).dll.config" Query="/configuration/appSettings/add[@key='BuildInfo']/@value" Value="$(SolutionDir)" /> 
</Target> 

그것은 우리가 실제로 많이 다른 로컬보다 디렉토리를 구조화 된 우리의 빌드 시스템에서 일부 펑키 물건을했다 밝혀 : 여기에가는 종료 된 솔루션입니다. 우리는 $ (TeamBuildOutDir) 빌드 속성을 사용하여 모든 바이너리를 덤프했습니다. 그 지식을 얻은 후에 나는 우리가 필요로하는 위의 해결책을 만들 수있었습니다. 이것은 결국 내 BuildInfo 속성에 추가하고 나중에 처리 할 수있는 상당히 일관된 문자열을 만듭니다.

이 정보가 도움이 되었기를 바랍니다.

0

어쩌면 MsBuild 확장 팩이 적합한가요? MSBuild.ExtensionPack.Xml.XmlFile 작업과 UpdateAttribute (http://www.msbuildextensionpack.com/help/3.5.11.0/html/4009fe8c-73c1-154f-ee8c-e9fda7f5fd96.htm) 작업을 통해 기존 특성 값을 변경할 수 있습니다. 파일, xpath 및 값을 정의해야합니다. 그러나이 예외가 .net 프레임 워크의 새 버전에서 작동하는지 확신하지 못합니다.

+0

흠, 이것에 대해 살펴 봐야 할 것입니다. 이것이 저에게 효과가 있다면, 그곳으로가는 길의 50 %를 얻을 수 있습니다. 브랜치 사이를 전환 할 때 브랜치 이름을 동적으로 가져 오는 방법이 필요합니다. – Anthony

+0

실지로 이것을 시도해 볼 수는 없지만, 미리 빌드 이벤트에서 배치 파일을 실행하고 msbuild 속성으로 해당 파일의 출력을 전달하여 작업에서 사용하도록 할 수 있습니다. 그 박쥐 파일 안에 git 명령을 실행할 수 있습니다 : git rev-parse --abbrev-ref HEAD (이 명령은 현재 브랜치를 줄 것입니다) 그리고 출력으로 에코합니다. 그러면 아마 그 출력을 처리하고 나중에 사용할 수있는 방법이있을 것입니다. – luki

+0

배치 파일이 필요하지 않습니다. Exec을 사용하여 git을 실행하면 (현재 디렉토리에 의존하지 않고 --git-dir과 --work-tree를 지정하는 것이 가장 좋습니다) 출력을 얻습니다. – stijn

0

$ SolutionDirectory에있는 경로에 의존하지 않는 것이 좋습니다. 값이있을 것이라는 보장이 없으므로 디렉토리에서 코드를 체크 아웃하고 규칙을 위반할 수 있습니다.

이 모든 것이 빌드 자동화에 적합한 것으로 가정합니다.

  • 등록
  • 속성 명령 줄에서 무시 될 수 있습니다은 MSBuild 스크립트에서 정의 할 수 있습니다
      가 (이 제한 될 수 있습니다 독립적으로 당신이 자동화에 사용하는 도구에 대한 MSBuild Properties 기억해야 할 몇 가지 중요한 것이있다 스크립트에서).
    • 속성에 대한 MSBuild 명명 규칙을 따르는 환경 변수는 속성으로 해석됩니다.

      1. 가 기본 값으로 스크립트에서 "지점"속성을 정의합니다 (즉, 마스터 개발) :이

  • 마음이 당신이해야 할 일이다. 명령 행/환경 변수에서 덮어 쓰기를 허용하십시오.
    <PropertyGroup> 
        <Branch Condition="'$(Branch)'==''">develop</Branch> 
    </PropertyGroup> 
    
  • 는 빌드 시스템 (연속 통합 서버)에서 apropriate 값을 전송, 그것은 evironment 변수 또는 명령 줄 속성으로 할 수있다. 어떤 도구를 사용하든 상관 없습니다. 모두 지원합니다. (TFS, TeamCity, CruiseControl.Net 등) 일부는 소스 제어 설정을 기반으로 미리 정의되어 있으며 다른 경우 수동으로해야합니다. 기존 빌드 로그를 검토하여 분기에 이미 설정된 속성이 있는지 또는 속성을 올바르게 설정하는지 확인할 수 있습니다.

  • 필요에 따라 사전 빌드 이벤트의 값을 사용하십시오. 바로 "명령 줄 인수"필드 추가에 프로젝트> 속성> 디버그를 클릭 Visual Studio에서

    개발 목적
  • : /P : 빌드 당신은 VS에서 빌드를 실행할 때 = yourbranchname는는 것이다 여기에 정의 된 값을 사용하십시오.