어셈블리 버전화 속성을 사용하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/175256

  •  05-07-2019
  •  | 
  •  

문제

그만큼 조립 전환 그리고 어셈블리 파일 전환 속성은 .NET 어셈블리의 버전 번호를 처리하는 내장 방법입니다. 이 프레임 워크는 버전 번호 (빌드 및 개정, Microsoft 용어로)의 가장 중요한 부분을 가질 수있는 기능을 제공하지만, 이는 자동으로 결정되었지만,이 방법이 꽤 약하며 의심 할 여지없이 다른 많은 사람들이 있습니다.

그렇다면 프로젝트의 실제 버전을 더 잘 반영하는 버전 번호를 갖는 최상의 작업을 수행하는 방법이 어떤 방법으로 결정 되었습니까? 버전의 일부를 날짜와 시간으로 설정하는 사전 건축 스크립트가 있습니까? 프레임 워크에서 제공하는 자동 생성을 사용합니까? 또는 다른 것? 어셈블리/파일 버전화를 관리하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

현재 프로젝트에서 우리는 전복 개정 번호를 버전 번호의 가장 유의미한 (빌드) 부분으로 사용하고 Nant 스크립트를 사용하여 프로젝트 어셈블리 인포 파일을 만듭니다. 어셈블리 버전 및 어셈블리 파일 전환 속성 모두에 대해 동일한 버전 번호를 사용합니다. (다른 세 부분은 major.minor.point입니다. 여기서 Major.Minor는 데이터베이스 스키마 변경이있을 때마다 매출이 증가하고 각 릴리스마다 포인트가 증가합니다.)

우리는 빌드 번호가 단순히 증가하는 것으로 시작했지만 모든 빌드에 대해 버전 파일을 체크인해야했으며 병합 할 때 충돌이 발생했습니다. 그것이 불가능한 것으로 판명되었을 때, 우리는 cruisecontrol.net을 사용하여 빌드 번호를 생성하기 시작했지만 특정 빌드를 수동으로 재현하기가 어려워졌습니다. 결국 우리는 현재 (Subversion-Revision) 계획에 갔다.

참고 : 불행히도 .NET을 사용하면 .NET 컴파일러가 컴파일 할 때 현재 타임 스탬프를 객체 파일로 인코딩하기 때문에 과거 개정판에서 빌드를 완벽하게 재현 할 수 없습니다. 동일한 코드를 컴파일 할 때마다 다른 객체 파일이 나타납니다.

다른 팁

여기에 Subversion 개정 번호를 어셈블리 버전의 구성 요소로 사용하는 것에 대한 많은 게시물이 있습니다. 조심하십시오 : Windows (ABCD)에서 사용 가능한 4 가지 버전 번호는 각각 16 비트로 제한됩니다 (Max = 65535). 전복 개정 번호는 특히 동일한 저장소에서 여러 프로젝트를 호스팅하는 경우이 한도를 쉽게 초과 할 수 있습니다.

전복을 사용한 이전 직장에서는 CCNET에 대한 Nant 스크립트를 실행하여 저장소 버전을 추출하여 최종 번호로 사용했습니다.

이 작업에서 우리는 vss (셔터)를 사용하므로 실제로 옵션이 아니므로 다음 지침으로 수동으로 업데이트하는 정책이 있습니다.

  • 전공 : 기능 또는 인터페이스의 유의미한 (> 25%) 변경 또는 추가.
  • 미성년자 : 기능 또는 인터페이스의 작은 변경 또는 추가.
  • 빌드 : 인터페이스를 깨는 사소한 변경.
  • 개정 : 인터페이스를 변경하지 않는 빌드로 수정합니다.

또한 어셈블리 및 파일 버전을 동기화합니다. 어셈블리 버전은 프로그래밍 방식으로 쉽게 읽을 수 있으며 파일 버전은 Windows 탐색기의 세부 사항 모드로 열로 표시 될 수 있습니다.

빌드 스크립트는 TFS에서 버전으로 변경 설정 번호를 주입합니다. 그렇게하면 우리는 빌드에 어떤 체크인이 있는지 정확히 알고 있습니다.

우리는 cruisecontrol.net 빌드 서버가 Perforce Changelist 번호를 AssemblyFileVersion -이를 통해 빌드 서버에서 구축 한 어셈블리의 소스 코드로 다시 추적 할 수 있습니다. (우리는 항상 메인 브랜치에서 구축합니다.)

고객이 우리가 AssemblyVersion 변경 사항이 중단되지 않는 한 상수는 고객 코드가 새 버전에 대해 다시 제작되도록 버전을 증가시킵니다.

우리는 Subversion의 버전을 사용하고 BuildScripts가 어셈블리 버전 정보를 업데이트하여 Source Checkins 컨트롤 버전을 업데이트합니다.

우리는 릴리스 (또는 빌드) 날짜를 어셈블리에 포함시키는 경향이 있습니다. 예를 들어 오늘날에 구축 된 경우 버전은 "2008.10.06"(빌드 스크립트가 업데이트 됨)입니다.

어셈블리 versionattribute는 어셈블리의 정체성의 일부입니다. 즉, 변경하면 해당 어셈블리와 연결되는 프로그램이 다른 어셈블리 및 프로그램을 다시 컴파일/링크해야합니다. 또는 버전 정책을 적용해야합니다. 우리는 그 자막을 찾지 못했기 때문에 각 핫픽스에 대한 어셈블리 파일 전환 만 증가시키고 각 주요 릴리스에 대한 조립 전환 만 변경하도록 선택합니다. 우리는이 결정이 Win32 DLL Hell 중 일부를 다시 가져옵니다. 우리는 각 빌드에 대한 어셈블리 파일 전환을 증가시키고 해당 버전으로 버전 제어 시스템에 레이블/태그를 표시하므로 바이너리가 어떤 소스에서 왔는지 알 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top