.NET 프로젝트에서 Directory.Build.props 사용하기
Introduction
.NET 프로젝트를 관리하면서 여러 프로젝트 간의 공통 설정을 쉽게 적용하고 싶다면 Directory.Build.props 파일을 활용할 수 있습니다. 이 파일은 MSBuild에서 제공하는 기능으로, 하나의 파일에 프로젝트 공통 설정을 정의하고 모든 하위 프로젝트에 일관되게 적용할 수 있게 해줍니다. 이를 통해 대규모 솔루션에서 중복 설정을 줄이고 유지보수를 쉽게 할 수 있습니다.
Directory.Build.props란?
Directory.Build.props 파일은 MSBuild에서 프로젝트의 초기 속성을 정의하는 데 사용됩니다. 이 파일은 특정 디렉토리 내의 모든 프로젝트에 공통적으로 적용됩니다. 따라서 여러 프로젝트가 있을 때, 설정을 중앙 집중식으로 관리할 수 있는 장점이 있습니다.
사용 이유
- 여러 프로젝트에서 반복되는 설정을 한 곳에서 정의하여 유지보수를 쉽게 할 수 있습니다.
- 공통 속성, NuGet 패키지, 빌드 옵션 등을 일관되게 설정하여 개발 효율성을 높일 수 있습니다.
Directory.Build.props 파일 생성 및 사용 방법
1. Directory.Build.props 파일 생성
솔루션 루트 또는 원하는 디렉토리의 루트에 Directory.Build.props라는 이름의 파일을 생성합니다. 이 파일은 해당 디렉토리 및 하위 디렉토리에 있는 모든 프로젝트에 적용됩니다.
2. 파일 내용 작성
Directory.Build.props 파일에 속성을 정의합니다. 다음은 .NET 6.0을 타겟으로 하는 기본적인 예시입니다.
<Project>
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Serilog" Version="2.10.0" />
</ItemGroup>
</Project>
위 설정은 모든 프로젝트에 대해 다음을 적용합니다:
- TargetFramework: 모든 프로젝트를 .NET 6.0으로 타겟
- LangVersion: 최신 C# 버전 사용
- Nullable: 널 가능성 분석 활성화
- TreatWarningsAsErrors: 경고를 오류로 처리
3. 특정 조건에 따라 속성 적용
빌드 구성에 따라 다른 속성을 적용하려면 조건문을 사용할 수 있습니다.
<Project>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<DefineConstants>DEBUG;TRACE</DefineConstants>
<Optimize>false</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
</PropertyGroup>
</Project>
이 설정은 Debug 모드와 Release 모드에 따라 다른 설정을 적용합니다.
4. 특정 프로젝트에서 Directory.Build.props 설정 무시
특정 프로젝트에서 Directory.Build.props 설정을 무시하고 싶다면, 프로젝트 파일에 다음과 같은 코드를 추가하여 해당 파일의 자동 로드를 막을 수 있습니다.
<Project>
<Import Project="$(MSBuildThisFileDirectory)../Directory.Build.props" Condition="false" />
</Project>
5. Directory.Build.targets
Directory.Build.targets 파일은 빌드 후반에 로드되며, 빌드 작업(Target)을 정의하거나 수정하는 데 사용됩니다. 예를 들어, 빌드 후 특정 파일을 복사하거나 배포하는 등의 작업을 정의할 수 있습니다.
Directory.Build.targets 예시
<Project>
<Target Name="AfterBuild" AfterTargets="Build">
<Message Text="빌드가 성공적으로 완료되었습니다!" Importance="High" />
<Copy SourceFiles="bin\$(Configuration)\net6.0\MyApp.dll" DestinationFolder="C:\Deploy\MyApp" />
</Target>
</Project>
위 코드는 빌드가 완료된 후 특정 작업을 수행합니다.
요약
- Directory.Build.props 파일을 사용하면 프로젝트 간 공통 설정을 정의하여 중복을 줄이고 일관성을 유지할 수 있습니다.
- 공통 속성, NuGet 패키지, 빌드 옵션 등을 정의하여 대규모 프로젝트의 관리 효율성을 높일 수 있습니다.
- **Directory.Build.targets**를 활용하여 빌드 후 작업을 추가하거나 수정할 수 있습니다.
이렇게 Directory.Build.props와 Directory.Build.targets를 함께 활용하면, .NET 프로젝트의 설정 및 관리가 더욱 간편해집니다.