2014-03-06 1 views
2

이 주제에 대해 몇 가지 조사를 해본 결과 사용자 정의 빌드 번호뿐만 아니라 패치 어셈블리 정보도 생성 할 수있는 개별 솔루션을 찾을 수 있었지만 두 가지를 모두 수행 할 수는 없습니다. 검색에서 찾은 사용자 정의 POWERSHELL 스크립트를 사용할 때 빌드 번호가 패치로 작성되지 않지만 스크립트로 작성한 번호로 빌드 번호를 설정할 수 있습니다. 패치 할 때 유일한 성공은 세트 번호와 카운터를 사용할 때입니다. 그러나 POWERSHELL 스크립트가 생성하는 번호는 어셈블리 패치 담당자가 작업 할 수있는 정도까지 유지되지 않습니다. 내가 잘못하고 있니?TeamCity에서 사용자 정의 빌드 번호를 생성 한 다음 어셈블리 정보에 패치를 적용하려면 어떻게해야합니까?

답변

3

마침내 Chaitanya의 제공 논리의 약간 그것을 해결 ...하지만 수정 :

$ww = ([Math]::Floor([DateTime]::Now.DayOfYear/7)+1) 

Write-Host "##teamcity[buildNumber '%major.minor%.$ww.%build.counter%']" 
$fileLocation = Join-Path -Path "%teamcity.build.checkoutDir%" -ChildPath "\SourceDir\AssemblyInfo.cs" 

$oldValue = "AssemblyFileVersion\(""(\d+)\.\d+\.\d+\.\d+""\)" 
$newValue = [string]::Concat("AssemblyFileVersion(""%major.minor%.", $ww, ".%build.counter%", """)") 

(get-content $fileLocation) | foreach-object {$_ -replace $oldValue, $newValue} | set-content $fileLocation 
1

우리 프로젝트에서는 CommonAssemblyInfo.cs 파일을 사용하여 해결했습니다. 기본적으로 솔루션에 추가하고 개별 파일에서 AssemblyInfo.cs 파일을 제거하면 모든 dll을 컴파일 할 때 CommonAssemblyInfo.cs 파일에 지정된 어셈블리 정보가 있습니다.

컴파일하기 전에이 파일을 첫 번째 단계로 업데이트합니다. 우리가 사용하는 고유 번호는 소스 제어 시스템 (이 경우에는 TFS)의 변경 집합 ID입니다. 기본적으로 소스 제어 변경 세트 번호는 고유하고 관련성이 높습니다. 소스 컨트롤에서 어떤 변경 집합으로 생성 된 어셈블리인지 정확하게 알려줍니다.

는 기본적으로 우리의 빌드 구성의 첫 번째 단계는 (그에 따라 CommonAssemblyInfo.cs에 업데이트 경로) 다음과 같은 형태 PowerShell 스크립트

$fileLocation = Join-Path -Path "%teamcity.build.checkoutDir%" -ChildPath "Source\CommonAssemblyInfo.cs" 

$oldValue = "AssemblyVersion\(""(\d+)\.\d+\.\d+\.\d+""\)" 
$newValue = 'AssemblyVersion("$1.0.0.%build.vcs.number%")' 

(get-content $fileLocation) | foreach-object {$_ -replace $oldValue, $newValue} | set-content $fileLocation 

그래서, SETP 1 빌드 변경 집합 번호와 어셈블리의 버전을 업데이트입니다 위와 같이. 2 단계, 솔루션을 컴파일하십시오. X, 테스트, 배포에 3 단계 등 등

+0

이 코드는 나를 매우 가까이 보인다. 어셈블리 빌드 번호를 성공적으로 변경하지만 최종 컴파일 된 EXE는 여전히 세부 사항에 1.0.0.0을 표시합니다. 그러나 teamcity 체크 아웃 폴더의 작업 디렉토리를 보면 assemblyinfo 파일이 올바르게 조정되었습니다. 그래서 이것은 여전히 ​​지속되지 않는 또 다른 경우 인 것처럼 보입니다. – DrDoomPDX

+0

명확히하기 위해 컴파일 단계 전에이 코드를 사용하고 있습니다. 그래서 왜 그것이 지속되지 않는지 나는 확신하지 못한다. 대조적으로, AssemblyInfo patcher를 시스템 카운터/빌드 번호와 함께 사용하면 잘된 것처럼 보입니다. 그 방법으로 가지고있는 유일한 문제는 내가 원하는 방식으로 빌드 번호를 사용자 정의 할 수 없다는 것입니다. – DrDoomPDX

관련 문제