문제

.NET 어셈블리의 버전 문자열에 SVN 저장소 개정 번호를 포함할 수 있는 방법이 있습니까?Major.Minor.SVNRev와 같은 것

CC.NET(실제로는 ASP.NET이지만)과 같은 것으로 이 작업을 수행한다는 언급을 본 적이 있지만 추가 소프트웨어 없이 이를 수행할 수 있는 방법이 있습니까?빌드 배치 스크립트를 사용하기 전에 C/C++에서 비슷한 작업을 수행했지만 버전 번호를 읽은 다음 스크립트에서 다음과 같은 효과가 있을 때마다 "ver.h"라는 파일을 작성하도록 하여 수행했습니다.

#define MAJORVER 4
#define MINORVER 23
#define SOURCEVER 965

그런 다음 이러한 정의를 사용하여 버전 문자열을 생성합니다.

.NET에서 이와 같은 것이 가능합니까?

도움이 되었습니까?

해결책

SubWCRev를 살펴보십시오 - http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

어셈블리 버전 번호는 일반적으로 Assemblyinfo.cs에 있습니다.

다른 팁

다음은 어셈블리의 개정 정보를 자동으로 업데이트하는 C# 예제입니다.그다지 정교하지 않은 Will Dean의 답변을 기반으로합니다.

예 :

  1. 프로젝트 폴더의 AssemblyInfo.cs를 AssemblyInfotemplate.cs로 복사하십시오 속성.
  2. 변경 빌드 액션 에게 없음 AssemblyInfoTemplate.cs용.
  3. AssemblyFileVersion이 있는 줄을 다음과 같이 수정합니다.

    [assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

  4. 다음을 추가해 보세요.

    [assembly: AssemblyInformationalVersion("Build date: $WCNOW=%Y-%m-%d %H:%M:%S$; Revision date: $WCDATE=%Y-%m-%d %H:%M:%S$; Revision(s) in working copy: $WCRANGE$$WCMODS?; WARNING working copy had uncommitted modifications:$.")],

    어셈블리가 빌드된 소스의 개정 상태에 대한 세부 정보를 제공합니다.

  5. 프로젝트 파일 속성에 다음 사전 빌드 이벤트를 추가합니다.

    subwcrev "$(SolutionDir)." "$(ProjectDir)Properties\AssemblyInfoTemplate.cs" "$(ProjectDir)Properties\AssemblyInfo.cs" -f

  6. svn 무시 목록에 AssemblyInfo.cs를 추가하는 것을 고려해보세요.대체 개정 번호와 날짜로 인해 파일이 수정되어 사소한 변경 및 개정이 발생하며 $WCMODS$는 true로 평가됩니다.물론 AssemblyInfo.cs가 프로젝트에 포함되어야 합니다.

Wim Coenen의 반대에 대한 응답으로 Darryl이 제안한 것과 달리 AssemblyFileVersion도 다음을 수행한다는 것을 알았습니다. ~ 아니다 2^16 이상의 숫자를 지원합니다.빌드는 완료되지만 속성은 파일 버전 실제 어셈블리에서는 AssemblyFileVersion 모듈로 65536이 됩니다.따라서 1.0.0.65536과 1.0.0.131072는 1.0.0.0 등을 생성합니다.이 예에서는 AssemblyInformationalVersion 속성에 항상 실제 개정 번호가 있습니다.이것이 중요한 문제라고 생각되면 3단계를 생략할 수 있습니다.

편집하다:이 솔루션을 한동안 사용한 후 추가 정보.

  1. 이제 AssemblyInfoTemplate.cs 대신 AssemblyInfo.cst를 사용합니다. 빌드 액션 옵션 없음, 오류 목록이 복잡해지지는 않지만 구문 강조가 느슨해집니다.
  2. AssemblyInfo.cst 파일에 두 가지 테스트를 추가했습니다.

    #if(!DEBUG)    
        $WCMODS?#error Working copy has uncommitted modifications, please commit all modifications before creating a release build.:$ 
    #endif 
    #if(!DEBUG)       
        $WCMIXED?#error Working copy has multiple revisions, please update to the latest revision before creating a release build.:$ 
    #endif
    

    이를 사용하면 일반적으로 커밋 후 성공적인 릴리스 빌드를 수행하기 전에 전체 SVN 업데이트를 수행해야 합니다.그렇지 않으면 $WCMIXED가 true가 됩니다.이는 커밋된 파일이 커밋 후 헤드 개정판에 있지만 다른 파일은 그렇지 않기 때문에 발생하는 것 같습니다.

  3. svn 버전 정보 확인 범위를 설정하는 subwcrev의 첫 번째 매개변수인 "$(SolutionDir)"가 항상 원하는 대로 작동하는지 의심스럽습니다.각 개별 어셈블리가 일관된 개정판에 있으면 만족한다면 $(ProjectDir)이어야 할 수도 있습니다.

덧셈 @tommylux의 의견에 답변합니다.

SubWcRev는 프로젝트의 모든 파일에 사용할 수 있습니다.웹 페이지에 개정 정보를 표시하려면 다음 VersionInfo 템플릿을 사용할 수 있습니다.

public class VersionInfo
{       
    public const int RevisionNumber = $WCREV$;
    public const string BuildDate = "$WCNOW=%Y-%m-%d %H:%M:%S$";
    public const string RevisionDate = "$WCDATE=%Y-%m-%d %H:%M:%S$";
    public const string RevisionsInWorkingCopy = "$WCRANGE$";
    public const bool UncommitedModification = $WCMODS?true:false$;
}

AssemblyInfo.cst와 같은 사전 빌드 이벤트를 추가하면 모든 관련 SubVersion 정보에 쉽게 액세스할 수 있습니다.

가능하지만 다음과 같은 행위를 해서는 안 됩니다.어셈블리 버전 문자열의 구성 요소는 16비트 숫자(최대 65535)로 제한됩니다.Subversion 개정 번호는 그보다 쉽게 ​​커질 수 있으므로 어느 시점에서 컴파일러가 갑자기 불평할 것입니다.

다음 문서를 읽고 훑어보세요:

DotSVN을 사용하여 .NET에서 Subversion 저장소에 액세스

어떻게:작업 작성

C# AssemblyInfo 파일에 SVN 버전 및 빌드 번호를 삽입하세요.

Microsoft Build Engine에 대한 사용자 지정 작업으로 앱 컴파일

세 번째 참조에서 언급된 MSBuildCommunityTasks svnversion은 Mac 10.5.6의 svn 및 Vista를 호스팅하는 Parallels(예: 전체 OS) 내 VS2008 C# 프로젝트 빌드에서 수행되지 않습니다.

DotSVN을 사용하여 저장소에서 개정판을 검색하는 작업을 직접 작성하세요.

using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using DotSVN.Common;
using DotSVN.Common.Entities;
using DotSVN.Common.Util;
using DotSVN.Server.RepositoryAccess;

namespace GetSVNVersion
{
    public class GetRevision : Task
    {
        [Required]
        public string Repository { get; set; }
        [Output]
        public string Revision { get; set; }

        public override bool Execute()
        {
            ISVNRepository repo;
            bool connected = true;
            try
            {
                repo = SVNRepositoryFactory.Create(new SVNURL(Repository));
                repo.OpenRepository();
                Revision = repo.GetLatestRevision().ToString();
                Log.LogCommandLine(Repository + " is revision " + Revision);
                repo.CloseRepository();
            }
            catch(Exception e)
            {
                Log.LogError("Error retrieving revision number for " + Repository + ": " + e.Message);
                connected = false;
            }
            return connected;
        }
    }
}

이 방법을 사용하면 저장소 경로가 "file:///Y:/repo"가 될 수 있습니다. 여기서 Y는 다음과 같습니다.Vista에 매핑된 Mac 디렉토리입니다.

또 다른 답변에서는 번호 크기 제한으로 인해 SVN 개정 번호가 좋지 않을 수 있다고 언급했습니다.

다음 링크는 SNV 개정 번호뿐만 아니라 날짜 버전 정보 템플릿도 제공합니다.

이를 .NET 프로젝트에 추가하는 것은 간단합니다. 수행할 작업이 거의 없습니다.

이 문제를 해결하는 github 프로젝트는 다음과 같습니다.https://github.com/AndrewFreemantle/When-The-Version/downloads

다음 URL은 느리게 로드될 수 있지만 이 작업을 수행하는 방법에 대한 단계별 설명입니다(쉽고 짧은 3~4단계).

http://www.fatlemon.co.uk/2011/11/wtv-automatic-date-based-version-numbering-for-net-with-whentheversion/

svn info는 현재 사용 중인 버전을 알려줍니다. 프로젝트의 VS에서 "사전 빌드" 이벤트를 만들어 svn info를 실행하고 자체 개발한 명령줄 앱으로 결과를 구문 분석하여 Assemblyinfo.cs를 생성할 수 있습니다.

이전에 이 작업을 수행했지만 ccnet이 이를 nant에 변수로 전달하도록 빠르게 전환했습니다.

AssemblyInfo.cs 프로젝트의 버전 번호를 업데이트하려면 다음 문서를 참조하세요.

코드프로젝트:Visual Studio 프로젝트에서 Subversion 개정 번호 사용

SVN 키워드를 활성화하면 프로젝트를 체크인할 때마다 Subversion이 파일에서 특정 "키워드"를 검색하고 키워드를 일부 정보로 바꿉니다.

예를 들어, 소스 파일 상단에 다음 키워드가 포함된 헤더를 만듭니다.

'$저자:$
'$ID:$
'$개정:$

이 파일을 Subversion으로 체크인하면 이 키워드가 다음으로 대체됩니다.

'$저자:$
'$ID:myfile.vb 145 2008-07-16 15:24:29Z paulbetteridge $
'$개정:145$

모든 프로젝트에서 참조할 수 있는 공유 어셈블리 버전 파일을 사용할 수 있습니다.

어퍼컷 이거 하는거야 - http://ferventcoder.com/archive/2009/05/21/uppercut---automated-builds---versionbuilder.aspx

이렇게 하면 어셈블리에서 버전을 얻기 위해 무엇을 할 수 있는지에 대한 아이디어를 얻을 수 있습니다.

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