msbuild 구축 시 Assembly Version 의 Revision 버 전 번호 대신 SVN 으로 버 전 번 호 를 수정 합 니 다.
1) 순서 흐름 번호.매번 구축 할 때마다 지난번 에 기 록 된 흐름 번 호 를 + 1 로 버 전 으로 업데이트 해 야 합 니 다.매번 구 축 된 버 전 번 호 를 기록 하려 면 코드 기 에 제출 해 야 한다. 코드 수정 버 전 + 1 을 초래 할 뿐만 아니 라 구축 할 때 동쪽 에 제출 하 는 것 은 항상 불쾌 한 일이 다.
2) 타임 스탬프.유수 호 에 비해 믿 을 만 한 것 이 많 고 너무 길 어서 초 단위 로 도 하루 에 86400 의 증 가 량 이다.
3) SVN 에서 코드 가 검출 되 었 을 때의 수정 버 전 번호.가장 믿 을 만 한 것 은 바로 이것 입 니 다. 코드 가 업데이트 되 고 버 전 번호 가 증가 하 며 코드 가 업데이트 되 지 않 았 으 며 버 전 번호 가 변 하지 않 습 니 다.일반적인 상황 에서 코드 가 변 하지 않 고 구축 결과 에 차이 가 있 을 필요 가 없 기 때문에 이것 을 선택 하 세 요!
물론 이 블 로그 의 관건 은 여기에 있 지 않 습 니 다. MSBuild 가 구축 할 때 버 전 번 호 를 얻 고 Assembly Info. cs 의 Assembly Version 이나 Assembly FileVersion 을 교체 하 는 것 이 관건 입 니 다.이것 은 원생 의 MSBuild Task 로 는 할 수 없 을 것 같 고, 스스로 Task 를 쓰 는 것 은 너무 피곤 하 다.그래서 제3자 Task: MSBuild Community Tasks 를 찾 았 습 니 다.
사실 이것 은 MSBuild Community Tasks 를 처음 접 하 는 것 이 아 닙 니 다. 지난번 에 사용 한 것 은 프로젝트 구축 시 생 성 된 결 과 를 압축 파일 로 포장 해 야 하기 때문에 Zip Task 를 사 용 했 습 니 다.이번 에는 두 개의 Task 를 사용 해 야 합 니 다.
SvnVersion Task, 코드 를 가 져 오 는 SVN 수정 버 전 번호
FileUpdate, AssemblyInfo. cs 파일 업데이트
다음은 실험 환경 과 코드 입 니 다.
우선 프로젝트 디 렉 터 리 구조 (test. xml 은 MSBuild 구축 스 크 립 트)
C:.
├─build
│ │ test.xml
│ │
│ └─msbuildtasks
│ MSBuild.Community.Tasks.dll
│ MSBuild.Community.Tasks.Targets
│
└─MyProject
└─Properties
AssemblyInfo.cs
빌 드 스 크 립 트 는 하나의 이벤트 만 했 습 니 다. 바로 Assembly Info. cs 의 두 버 전 번 호 를 업데이트 하 는 마지막 (버 전 번호 수정) 입 니 다.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="msbuildtasks\MSBuild.Community.Tasks.Targets" />
<PropertyGroup>
<MSBuildCommunityTasksLib>$([MSBUILD]::Unescape(MSBuild.Community.Tasks.dll))</MSBuildCommunityTasksLib>
</PropertyGroup>
<Target Name="Test">
<ItemGroup>
<AssemblyInfos Include="..\MyProject\**\AssemblyInfo.cs" />
</ItemGroup>
<SvnVersion LocalPath=".">
<Output TaskParameter="Revision" PropertyName="Revision" />
</SvnVersion>
<Message Text="Revision: $(Revision)" />
<FileUpdate Files="@(AssemblyInfos)"
Regex="\("(\d+\.\d+\.\d+\.)\d+"\)\]"
ReplacementText="("${1}$(Revision)")]" />
</Target>
</Project>
스 크 립 트 설명:
<Import Project="msbuildtasks\MSBuild.Community.Tasks.Targets" />
<PropertyGroup>
<MSBuildCommunityTasksLib>$([MSBUILD]::Unescape(MSBuild.Community.Tasks.dll))</MSBuildCommunityTasksLib>
</PropertyGroup>
여 기 는 MSBuild Community Tasks 를 도입 한 동적 라 이브 러 리 입 니 다. 공식 적 으로 작성 하면 그대로 베 끼 면 됩 니 다.
<ItemGroup>
<AssemblyInfos Include="..\MyProject\**\AssemblyInfo.cs" />
</ItemGroup>
하나의 솔 루 션 에 있 는 여러 항목 의 버 전 번 호 를 함께 업데이트 할 수 있 도록 모든 Assembly Info. cs 를 찾 습 니 다.
<SvnVersion LocalPath=".">
<Output TaskParameter="Revision" PropertyName="Revision" />
</SvnVersion>
현재 코드 의 SVN 수정 버 전 번 호 를 가 져 오 는 것 이 분명 합 니 다. LocalPath 는 어떤 디 렉 터 리 의 버 전 번 호 를 가 져 올 지 지정 하고, Output 은 가 져 온 수정 버 전 번 호 를 "Revision" 속성 에 출력 합 니 다. Output 에 대해 서 는 참고 할 수 있 습 니 다. http://msdn.microsoft.com/zh-cn/library/ms164287.aspx
주의해 야 할 것 은 PATH 경로 에서 svnversion 명령 을 찾 을 수 있 습 니 다.PATH 가 설정 되 어 있 지 않 으 면 ToolPath 매개 변 수 를 사용 하여 svnversion 이 있 는 디 렉 터 리 를 지정 할 수 있 습 니 다.
<FileUpdate Files="@(AssemblyInfos)"
Regex="\("(\d+\.\d+\.\d+\.)\d+"\)\]"
ReplacementText="("${1}$(Revision)")]" />
이 부분 은 정규 표현 식 을 통 해 교체 버 전 번 호 를 찾 는 것 입 니 다.때로는 두 가지 주의 가 필요 하 다. 하 나 는 따옴표 를 쓸 때 & quot 를 사용 해 야 한다.대신둘 째 는 문자열 을 바 꾸 는 데 ${1} 을 $1 로 대체 하 는 것 이 좋 습 니 다. 뒤의 $(Revision) 도 숫자 이기 때문에 괄호 로 연결 하지 않 으 면 $1123 이 될 수 있 습 니 다. 정확하게 식별 되 지 않 습 니 다. 괄호 로 ${1} 123 이 므 로 오류 가 발생 하지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
awk 상용 명령awk 는 모든 입력 줄 을 하나의 기록 으로 인식 하고 그 줄 의 모든 단어 도 메 인 을 하나의 필드 로 인식 합 니 다. ARGC 명령 줄 에 awk 스 크 립 트 가 들 어 오 는 매개...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.