.net 프로젝트 컴파일 상수 조건에 따라 패키지 참조 목록 수정

Published Jul 20, 2023 | Updated Feb 2, 2024 | 0 comments

Visual Studio 프로젝트에서 구현하는 기능에 따라 패키지를 참조해서 사용하는데
공통 모듈로 사용되는 프로젝트의 경우 메인 솔루션에 따라 특정 기능을 활성화 하거나 비활성화 할 필요가 생겼습니다.
저의 경우 프로젝트 속성에서 상수를 추가한 다음에 소스 코드에서 컴파일 상수로 분기 처리하는 방법을 주로 사용했습니다.

#if HangFire
using Hangfire;
#endif

#if HangFire
    readonly IMyHangfireService _myHangfireService;
#else
#endif

근데 문득 사용하지 않는 기능을 위해 참조된 패키지까지 비활성화 하고 싶은 욕심이 생겼습니다.
그래서 다음과 같이 조건을 추가해서 해봤는데 생각처럼 적용되지 않습니다.

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DefineConstants>$(DefineConstants);HangFire;SocialLogin</DefineConstants>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <DefineConstants>$(DefineConstants);HangFire;SocialLogin</DefineConstants>
  </PropertyGroup>

  <ItemGroup Condition="'$(DefineConstants)'=='HangFire'">
    <PackageReference Include="Hangfire.AspNetCore" Version="1.8.3" />
    <PackageReference Include="Hangfire.SqlServer" Version="1.8.3" />
  </ItemGroup>

그래서 MSDN 을 찾아보니 정규식으로 처리가 가능한 방법이 있어 정리하고자 합니다.
다음 링크(MSBuild 조건부 구문)에서 확인이 가능합니다.
HangFire 상수가 적용된 경우 다음과 같이 정규식으로 처리가 가능합니다.

  <ItemGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch($(DefineConstants), '^(.*;)*HangFire(;.*)*$'))">
    <PackageReference Include="Hangfire.AspNetCore" Version="1.8.3" />
    <PackageReference Include="Hangfire.SqlServer" Version="1.8.3" />
  </ItemGroup>

해당 기능을 소스 코드 단에서 분기 처리만 해줘도 런타임에 실행되지 않는 한 메모리를 소모할 일은 없지만
사용자에게 배포되는 시점에 해당 패키지가 제외되므로 배포되는 용량을 줄일 수 있다는 점에서 메리트가 있는 것 같습니다.

Learn more on this topic

Related Blog Posts

WinSCP 접속 버퍼 길이 최적화

WinSCP 접속 버퍼 길이 최적화

WinSCP 에서 대용량 데이터를 복사하던 중에 발생한 상황에 대한 해결 과정입니다. (접속 버퍼 길이 최적화)

read more

Join in the conversation

Leave a Comment

0 Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

무료 온라인 전광판

전광판

텍스트를 입력하고 텍스트 효과 및 배경효과 를 변경해서 전체화면으로 표시할 수 있는 전광판 용도로 사용하실 수 있습니다. 각종 스포츠 및 공연 관람시 응원 용도로 사용이 가능합니다.

Carousel

여러개의 슬라이드를 추가하여 프레젠테이션 및 이미지 슬라이드 용도로 사용하실 수 있습니다. 브라우저가 포함된 IT 기기로 큰 모니터에 연결하여 매장 내 공지사항 및 메뉴소개를 이미지로 표시할 수 있습니다.

Pin It on Pinterest

Shares
Share This

Share This

Share this post with your friends!

Shares