S/W 개발을 하면서 디버깅 및 관리를 하기 위해 버전 정보를 표시하곤 합니다.
본 글에선 C#에서 버전정보를 가장 쉽게 관리하는 방법에 대해 설명드리려고 합니다.
본 예제에선 Visual Studio 2019 버전을 사용 하였지만 프로젝트 생성하는 UI만 다를뿐 동작은 다르지 크게 다르지 않습니다.
프로젝트 생성
우선 프로젝트 생성을 합니다.
Windows Forms 앱(.NET Framework)를 선택 후 다음을 눌러주세요.
프로젝트 이름을 본인이 원하는 이름으로 입력 후 만들기를 눌러주세요.
그 후 솔루션 탐색기에서 프로젝트를 오른쪽 클릭하여 파일 탐색기에서 폴더를 열어주세요.
프로젝트 파일 수정
프로젝트 폴더 내 WindowsFormsApp1(자신이 설정한 프로젝트 이름).csproj 파일을
오른쪽 클릭 -> 연결 프로그램 -> 메모장 선택
(만약 메모장이 보이지 않는다면 다른 앱 선택 클릭 -> 메모장 선택)
Deterministic 값을 true -> false로 변경 후 저장해주세요.
<Deterministic>false</Deterministic>
그 후 Visual Studio를 다시 클릭하면 아래와 같은 팝업이 뜹니다.
AssemlyInfo 수정
모두 다시 로드를 선택 한 후 Properties - AssemblyInfo.cs 파일을 열어줍니다.
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("WindowsFormsApp1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("WindowsFormsApp1")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("b9bbbeb8-62d9-449b-8657-f543e36aa958")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
// 기본값으로 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
아래와 같이 변경해주세요.
빌드 정보 가져오기
그 후 저장을 누르고 아래와 같이 코드를 입력 합니다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitializeControl();
}
private void InitializeControl()
{
Version version = Assembly.GetExecutingAssembly().GetName().Version;
string strVersion = string.Format("[ Last Build : {0} - Ver : {1} ]",
GetBuildTime(version), version);
this.Text = "MainForm - " + strVersion;
}
public DateTime GetBuildTime(Version version)
{
int day = version.Build;
System.DateTime buildTime = (new System.DateTime(1990, 1, 1)).AddDays(day);
int second = version.Revision;
second = second * 2;
buildTime = buildTime.AddSeconds(second);
//시차 보정
System.Globalization.DaylightTime daylingTime = System.TimeZone.CurrentTimeZone
.GetDaylightChanges(buildTime.Year);
if (System.TimeZone.IsDaylightSavingTime(buildTime, daylingTime))
buildTime = buildTime.Add(daylingTime.Delta);
return buildTime;
}
}
}
그 후 빌드하면 타이틀에 빌드 날짜와 버전을 표시하게 됩니다.