[C#] Build Auto Update C# 2015. 8. 7. 10:16

AssemblyInfo에 있는 Version을 자동으로 바꾸게 될 일이 생겼다.

 

보통 AssemblyVersion("0.0.0.*") 으로 처리 하면 자동적으로 시간에 비례하여 업데이트가 되지만

 

일정한 카운터가 올라가지는 않는 것을 발견..

 

여기저기 참고를 하다가 다음과 같이 처리를 했다.

 

일단 AssemblyVesion.tt 라는 파일을 만들고

 


<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".cs" #>

<#
int major = 0;
int minor = 0;
string build = "0";
string revision = "0";
string Assem = string.Empty;

string error = "";

try
{
    StreamReader reader = new StreamReader(Host.ResolvePath("version.snk"));
    revision = reader.ReadLine().Trim();
    revision = (int.Parse(revision.Trim()) + 1).ToString();
    reader.Close();
    StreamWriter writer = new StreamWriter(Host.ResolvePath("version.snk"), false);
    writer.WriteLine(revision);
    writer.Flush();
    writer.Close();
}
catch (Exception e)
{
 error = e.ToString();
 major = 9999;
 major = 9999;
    build = "9999";
 revision = "9999";
}
#>

using System.Reflection;
[assembly: AssemblyVersion("<#= major #>.<#= minor #>.<#= build #>.<#= revision #>")]
[assembly: AssemblyFileVersion("<#= major #>.<#= minor #>.<#= build #>.<#= revision #>")]

와 같이 코드를 넣었다.

 

내부적으로 카운터를 기록하기 위해서 version.snk 파일을 만들어 카운터 방안으로 삼아두고..

 

저 내부적 내용은 작성자마다 다르게 하면 되니.. 크게 신경 쓸 것은 없다.

 

그리고 빌드 이벤트에 아래와 같이 작성한다.

 

set textTemplatingPath="%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\$(VisualStudioVersion)\texttransform.exe"
if %textTemplatingPath%=="\Microsoft Shared\TextTemplating\$(VisualStudioVersion)\texttransform.exe" set textTemplatingPath="%CommonProgramFiles%\Microsoft Shared\TextTemplating\$(VisualStudioVersion)\texttransform.exe"
%textTemplatingPath% "$(ProjectDir)\Properties\AssemblyVersion.tt"

 

자.. 여기까지 되었다면.. 빌드하고자 하는 프로젝트를 정리하고 빌드를 한다. 그렇게 하면 자동 업데이트가 되어

 

수정되는 빌드 버전을 확인 할 수가 있을 것이다.

 

단 정리 <<< 를 해 줘야한다. 왜냐면 T4 디버그를 적용해야 하는 듯 하다.

 

tt 파일에서 ctrl + s를 하면 카운터가 변하는 것을확인 할 수 있는데 매번 빌드 할 때 그러기는 그렇고..

 

이래 저래 혼자 만지다 보니 정리하고 난 다음 빌드 하니 바뀌는 것을 확인 할 수가 있었다.

 

안해본거 조금씩 조금씩 한두개 손을 대보게 되네.. 흠냐..

 

나쁘진 않아..