2011-08-23 7 views
5

MSBuild Community Task library을 사용하여 현재의 SVN 버전을 가져 와서 내 AssemblyInfo 파일에서 최종 컴파일 된 dll 파일의 버전을 가져옵니다.MSBuild 커뮤니티 작업 라이브러리를 사용하여 .NET dll에서 SVN 버전 번호를 올바르게 설정하는 방법

아시다시피 SVN 버전은 수정 사항이있는 경우 "28"또는 "28M"과 같을 수 있습니다. MSBuild 메시지를 출력하고 Revision 속성을 출력하면 수정 후 28M을 얻을 수 있지만 AsseblyInfo를 업데이트 할 때 버전 번호는 28로만 유지됩니다.

버전 번호에 dll이 비 확인 체크인 수정을 사용하여 만들어 졌음을 나타 내기 위해 28M을 갖고 싶습니다. 어떻게 작동시킬 수 있습니까?

<Target Name="Compile"> 
<SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(SvnTool)"> 
    <Output TaskParameter="Revision" PropertyName="Revision" /> 
</SvnVersion> 

<ItemGroup> 
    <AssemblyInfoFiles Include="x.a\Properties\AssemblyInfo.cs" /> 
    <AssemblyInfoFiles Include="x.b\Properties\AssemblyInfo.cs" /> 
</ItemGroup> 

<FileUpdate Files="@(AssemblyInfoFiles)" 
      Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)" 
      ReplacementText="$(MajorVersion).$(MinorVersion).$(Revision).0" /> 

<MSBuild Projects="$(MSBuildProjectDirectory)\ConfigExplorer.sln" Targets="Rebuild" Properties="Configuration=$(BuildType);" /> 

+2

버전 클래스에서 버전이 'int'로 선언되었으므로 28M을 수정 번호로 사용할 수 없습니다 :'public int Revision {get; }'. 그러나 원하는 텍스트를 저장하는 대신 예를 들어 AssemblyInformationalVersionAttribute 특성을 사용할 수 있습니다. –

답변

4

닷넷 어셈블리의 버전 번호는 엄하게 입력된다. 그것들은 단지 문자열이 아니라 ushorts이므로 최대 65535 개를 의미합니다 (문서 http://msdn.microsoft.com/en-us/library/cbf1574z.aspx 참조). svn 리비전을 사용하면 (한 번에했던 것처럼) 빌드가 마술 번호를 초과하면 빌드가 중단됩니다.

도식 개발자 빌드 대 CI 빌드는 {year}.{month}.{day}.{build} 형식의 버전을 사용하는 것으로 사용되었습니다. 여기에서 빌드 번호는 추가 빌드 매개 변수로 지정되었습니다. 이것은 개발자의 빌드인지를 나타낼뿐만 아니라 빌드의 날짜를 알려주었습니다. (마지막 구성 요소가 0 임)

+0

당신은 SVN 개정 번호 문제를 지적했습니다. @Riri가 버전 번호를 생성하는 다른 방법을 사용하기로 결정했다면 어쩌면 그/그녀는이 유용한 것을 발견 할 것입니다. http://archive.msdn.microsoft.com/AssemblyInfoTaskvers –

관련 문제