Today
-
Yesterday
-
Total
-

ABOUT ME

-

방문자

  • [C#] 어셈블리 정보를 이용한 버전 관리, 자동 증가, 빌드 시간 변환
    Microsoft .NET/C# 2019. 10. 31. 17:53

    어셈블리의 버전 정보는 다음 네 가지 값으로 구성됨.


    예 ) 1.0.0.15

    주 버전     1
    부 버전     0
    빌드 번호  0
    수정 버전  15

    어셈블리에 저장된 버전 정보를 불러오는 방법은 아래와 같습니다.

    System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

     

    어셈블리 버전은 기본적으로 수동으로 변경하여 사용이 가능하지만 자동으로 증가하도록 설정이 가능.

     

    어셈블리 정보 자동 변경 설정

    .Net Framework의 경우

    더보기

    1. AssemblyInfo.cs 파일의 제일 하단으로 이동
    2. "[assembly: AssemblyVersion("1.0.0.0")]", "[assembly: AssemblyFileVersion("1.0.0.0")]"를 주석 처리하고 
    주석 처리되어있는 "[assembly: AssemblyVersion("1.0.*")]"를 활성화합니다.

    3. 위와 같이 변경한다면 CS8357 에러가 발생합니다. (정상입니다.)
    4. 프로젝트 폴더로 이동하여 프로젝트 파일(XXX.csproj)을 메모장으로 실행합니다.
    5. <Deterministic>true</Deterministic> 항목을 <Deterministic>false</Deterministic>로 변경합니다.
    6. VisualStudio로 돌아가면 파일 변경이 감지되었다고 팝업창이 출력됩니다. "모두 다시 로드" 합니다.
    7. 여기까지 설정했다면 빌드 시간에 따라 어셈블리 정보가 자동으로 변경됩니다.

     

    .Net 또는 .Net core의 경우

    더보기

    1. 프로젝트 폴더로 이동하여 프로젝트 파일(XXX.csproj)을 메모장으로 실행합니다.
    2. AssemblyVersion 항목을 아래 처럼 변경 후에 <Deterministic>false</Deterministic> 항목을 추가합니다.

        <AssemblyVersion>1.0.*</AssemblyVersion>
        <Deterministic>false</Deterministic>

     

    빌드 시간 변환 

     위와 같이 어셈블리 정보 자동 증가 값을 [assembly: AssemblyVersion("1.0.*")]로 설정할 경우 빌드 번호는 날짜, 수정 번호는 시간 값으로 변환 저장되며, 반환되는 값은 아래 함수를 통해 변환하여 언제 빌드된 버전인지 확인이 가능하다. 

     

    함수는 아래와 같은 방법으로 사용하면 빌드 시간을 얻을 수 있다. Get_BuildDateTime(System.Reflection.Assembly.GetExecutingAssembly().GetName().Version);

    /// <summary>
    /// 버전 정보를 넣으면 빌드 시간을 반환.
    /// </summary>
    /// <param name="version"></param>
    /// <returns></returns>
    public System.DateTime Get_BuildDateTime(System.Version version = null)
    {
        // 주.부.빌드.수정
        // 주 버전    Major Number
        // 부 버전    Minor Number
        // 빌드 번호  Build Number
        // 수정 버전  Revision NUmber
    
        //매개 변수가 존재할 경우
        if (version == null)
            version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
    
        //세번째 값(Build Number)은 2000년 1월 1일부터
        //Build된 날짜까지의 총 일(Days) 수 이다.
        int day = version.Build;
        System.DateTime dtBuild = (new System.DateTime(2000, 1, 1)).AddDays(day);
    
        //네번째 값(Revision NUmber)은 자정으로부터 Build된
        //시간까지의 지나간 초(Second) 값 이다.
        int intSeconds = version.Revision;
        intSeconds = intSeconds * 2;
        dtBuild = dtBuild.AddSeconds(intSeconds);
    
    
        //시차 보정
        System.Globalization.DaylightTime daylingTime = System.TimeZone.CurrentTimeZone
                .GetDaylightChanges(dtBuild.Year);
        if (System.TimeZone.IsDaylightSavingTime(dtBuild, daylingTime))
            dtBuild = dtBuild.Add(daylingTime.Delta);
    
        return dtBuild;
    }

     

     

     

     

     

     

Posted by virtualgiraffe.