티스토리 뷰
CI/CD 환경에서 빌드 추적은 굉장히 중요합니다. "이 바이너리가 언제 빌드된 건지", "어떤 커밋에서 나온 건지"를 알 수 있어야 디버깅과 배포 관리가 쉬워지죠. 과거 .NET Framework에서는 AssemblyVersion("1.0.*") 와일드카드로 빌드 시간을 자동 반영할 수 있었지만, .NET Core에서는 deterministic build 정책 때문에 더 이상 지원되지 않습니다.
그렇다면 어떻게 빌드 시간을 코드에 기록할 수 있을까요? 답은 MSBuild Target입니다.
MSBuild Target이란?
MSBuild는 빌드 과정을 여러 단계(Target)로 나눠 실행합니다. 예를 들어 Build, Compile, Clean, Publish 같은 단계가 있죠. 여기에 사용자가 원하는 단계(Target)을 추가하면, 빌드 과정에 자동으로 실행됩니다. 프로젝트 파일(.csproj)에 아래와 같이 단계(Target)을 작성하면 컴파일 시작 전에 원하는 작업을 끼워 넣을 수 있습니다.
<Target Name="SetBuildTime" BeforeTargets="BeforeBuild">
<!-- 빌드 직전에 실행되는 Target -->
</Target>
- Name="SetBuildTime" : 식별자, 추후 다른 단계(Target)에서 호출하거나, 로그에서 확인할 때 사용
- BeforeTargets="BeforeBuild" : BeforeBuild 단계(Target)이 실행되기 전에 SetBuildTime 단계(Target)가 실행되도록 지정. BeforeBuild 외에도 AfterBuild, BeforeClean, AfterClean, BeforePublish, AfterPublish 등의 단계(Target)들이 있습니다.
빌드 시간 기록하기
빌드 직전에 BuildInfo.cs 파일을 자동 생성해서 빌드 시간을 기록하는 방법을 살펴봅시다.
<Target Name="SetBuildTime" BeforeTargets="BeforeBuild">
<PropertyGroup>
<BuildTime>$([System.DateTime]::UtcNow.ToString("yyyy-MM-dd HH:mm:ss"))</BuildTime>
</PropertyGroup>
<WriteLinesToFile
File="Properties/BuildInfo.cs"
Lines="namespace $(MSBuildProjectName) { public static class BuildInfo { public const string BuildTime = "$(BuildTime)"%3B } }"
Overwrite="true" />
</Target>
좀 더 가독성 좋게 작성한다면 아래와 같이 작성할 수도 있습니다.
<Target Name="SetBuildTime" BeforeTargets="BeforeBuild">
<PropertyGroup>
<BuildCode>
<![CDATA[namespace $(MSBuildProjectName)
{
public static class BuildInfo
{
public const string BuildTime = "$([System.DateTime]::UtcNow.ToString('yyyy-MM-dd HH:mm:ss'))"%3B
}
}
]]>
</BuildCode>
</PropertyGroup>
<WriteLinesToFile File="Properties/BuildInfo.cs" Lines="$(BuildCode)" Overwrite="true" />
</Target>
위와 같이 작성 후 프로젝트를 빌드하면 먼저 Properties/BuildInfo.cs 파일이 생성되고, 이후에 빌드가 진행되게 됩니다. 아래는 생성된 BuildInfo.cs 파일 예시입니다.
namespace TestProject
{
public static class BuildInfo
{
public const string BuildTime = "2026-10-19 03:37:51";
}
}
BuildTime을 생성하는 것 외에도, C# DTO를 TypeScript DTO로 변환하거나, 다른 빌드 도구를 생성하거나, AI와 연동하는 등 다양한 방법으로 활용하실 수 있습니다.
'Windows App' 카테고리의 다른 글
| [Electron] Error: listen EACCES: permission denied 0.0.0.0:3000 (0) | 2026.04.14 |
|---|---|
| [WPF] Icon 설정 (0) | 2026.02.13 |
| [WPF] ComboBox 항목 가상화 (0) | 2026.02.06 |
| [WPF] Internet Explorer 실행 (0) | 2024.07.22 |
| [WinUI3] Unpackaged App + Administrator 권한으로 실행 (1) | 2024.07.19 |
| [C#] INotifyPropertyChanged 손쉽게 작성하기 (0) | 2023.05.19 |
| [WPF] WebBrower Rendering Version 변경 (0) | 2017.11.14 |
- material-ui
- npm
- Xamarin.Forms 요약
- ASP.NET Core
- VisualStudio
- linux
- Xamarin.iOS
- windows
- .NET Standard
- MS SQL
- Xamarin
- React
- Android
- Xamarin.Forms
- Vue
- flutter
- ios
- Xamarin.Forms eBook
- WPF
- TypeScript
- Total
- Today
- Yesterday
