[.net] SVN 개정 번호를 내 ASP.NET 웹 사이트와 어떻게 동기화합니까?

Stack Overflow는 하단에 Subversion 버전 번호가 있습니다.

svn 개정 : 679

.NET Web Site/Application, Windows Forms, WPD 프로젝트 / 솔루션에서 이러한 자동 버전 관리를 사용하고 싶습니다 .

어떻게 구현합니까?



답변

Jeff가 팟 캐스트 기록을 통해 일부 리프 링을 기반으로 CruiseControl.NET을 사용하는 것 같습니다 . 소스 제어에서 프로덕션까지 자동화 된 배포 기능이있는 것 같습니다. 이것이 삽입이 일어나는 곳일까요?


답변

자동화 된 빌드를 위해 xUnit.net으로 이를 수행 합니다. 우리는 CruiseControl.netTeamCity를 사용 하고 있습니다. 지속적인 통합을 위해 실행하는 MSBuild 작업은 자동으로 빌드 번호를 변경하므로 결과 빌드 ZIP 파일에는 적절하게 버전이 지정된 DLL 및 EXE 집합이 포함됩니다.

우리의 MSBuild에서 파일 (이뿐만 아니라 MS-PL 라이센스에 의해 덮여 당신이있는 거 환영이 DLL을 사용하는) : 정규 표현식 교체를 수행하는 DLL에 대한 UsingTask 참조가 포함

  <UsingTask
     AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll"
     TaskName = "CodePlex.MSBuildTasks.RegexReplace"/>

다음으로 CI 시스템에서 자동으로 제공하는 빌드 번호를 추출합니다. 원하는 경우 소스 제어 공급자에게 소스 개정 번호를 제공 할 수도 있지만 CI 빌드 번호로 통합 결과를 볼 수있을뿐만 아니라 빌드에 포함 된 변경 세트에 다시 링크합니다.

 <!-빌드 번호를 찾기위한 계단식 시도->

 <PropertyGroup Condition = " '$ (BuildNumber)'== ''">
   <BuildNumber> $ (BUILD_NUMBER) </ BuildNumber>
 </ PropertyGroup>
 <PropertyGroup Condition = " '$ (BuildNumber)'== ''">
   <BuildNumber> $ (ccnetlabel) </ BuildNumber>
 </ PropertyGroup>
 <PropertyGroup Condition = " '$ (BuildNumber)'== ''">
   <BuildNumber> 0 </ BuildNumber>
 </ PropertyGroup>

(TeamCity의 BUILD_NUMBER, CC.net의 ccnetlabel을 차례로 시도하고 둘 다없는 경우 기본값 0으로 설정하여 자동화 된 빌드 스크립트를 수동으로 테스트 할 수 있습니다.)

다음으로 빌드 번호를 모든 프로젝트에 연결하는 GlobalAssemblyInfo.cs 파일로 설정하는 작업이 있습니다.

 <Target Name = "SetVersionNumber">
   <RegexReplace
       패턴 = 'AssemblyVersion \ ( "(\ d + \. \ d + \. \ d +) \. \ d +"\)'
       Replacement = 'AssemblyVersion ( "$ 1. $ (BuildNumber)")'
       파일 = 'GlobalAssemblyInfo.cs'/>
   <Exec Command = "attrib -r xunit.installer \ App.manifest"/>
 </ 대상>

이렇게하면 AssemblyVersion 특성을 찾고 abcd 버전 번호를 abcBuildNumber로 바꿉니다. 일반적으로 소스는 빌더 번호의 처음 세 부분이 고정되고 네 번째 부분은 0 (fe, 오늘은 1.0.2.0)으로 트리에 체크인 된 상태로 둡니다.

빌드 프로세스에서 SetVersionNumber 작업이 빌드 작업보다 우선하는지 확인합니다. 마지막으로 Zip 작업을 사용하여 빌드 결과를 압축하여 모든 자동화 된 빌드에 대한 바이너리 기록을 얻습니다.


답변

코드의 아무 곳에 나 다음을 추가하여 수행 할 수 있습니다.

$Id:$

예를 들어 @Jeff는 다음을 수행했습니다.

<div id="svnrevision">svn revision: $Id:$</div>

그리고 서버에 체크인했을 때 $ Id : $를 현재 개정 번호로 대체했습니다. 이 참조찾았습니다 .

또한이 $ 날짜 : $ , $ 레브 : $ , $ 수정 : $는


답변

ASP.Net MVC(StackOverflow가 사용하는 것처럼) 사용중인 경우 최신 SVN 개정판을 자동으로 가져오고 표시하는 방법에 대한 따라하기 쉬운 3 단계 가이드를 작성했습니다 . 가이드는이 질문에 대해 스스로 생각하면서 영감을 얻었습니다! :영형)


답변

@Balloon TortoiseSVN을 사용하는 경우 패키지 된 SubWCRev 프로그램을 사용할 수 있습니다 . 작업 복사본을 쿼리하고 가장 높은 개정 번호 만 알려줍니다. 물론 이것은 서버 측 문제에 대한 클라이언트 측 접근 방식으로 보이지만 훌륭한 명령 줄 프로그램이므로 출력을 캡처하여 상당히 쉽게 사용할 수 있어야합니다.


답변

$rev다른 것들은 개별 파일에 대한 개정이므로 파일이 변경되지 않는 한 변경되지 않습니다. 웹 페이지의 번호는 전체 프로젝트에 대한 svn 개정 번호입니다 (대부분 여기에서 가정합니다). 이것은 다른 사람들이 지적 해 온 파일 개정판과 다릅니다.

이 경우 CCNET이 프로젝트의 개정 번호를 가져와 해당 번호로 웹 페이지의 일부를 다시 작성한다고 가정합니다. 모든 CI 솔루션이이를 수행 할 수 있어야하며 CCNET 및 Teamcity로 직접 설정해야합니다 (웹 페이지는 아니지만 배포 / 어셈블리 버전의 자동 버전 관리).

이렇게하려면이를 지원하는 CI 솔루션을 사용하거나 빌드 프로세스 (MSbuild / Nant)를 사용하여 해당 버전을 저장하고 “배포”하기 전에 파일에 기록하십시오.


답변

@BradWilson의 답변에 추가하려면 “원하는 경우 소스 제어 공급자에게 소스 개정 번호를 제공 할 수도 있습니다.”

Subversion과 MSBuild를 연결하려면 :
MSBuild 커뮤니티 작업 프로젝트