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

Jul 20, 2023 | 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

C# 으로 사용자 입력을 받아 동작하는 콘솔 프로그램 구현

C# 으로 사용자 입력을 받아 동작하는 콘솔 프로그램 구현

네이버 지식인에서 우연히 보게 된 누군가의 질문... c# 콘솔 형태의 프로그램이며, 일정 갯수의 숫자를 데이터로 입력 받아 최대값/최소값 등을 구하거나 종료할 수 있는 기능을 하는 프로그램이 요구사항 이었다 내가 답변한 원문은 여기 : C# 프로그래밍 질문 : 지식iN (naver.com) 네이버 지식인 링크 실제 프로그램이 실행되는 스크린샷은 다음 이미지와 같습니다. 프로그램이 실행되면 메뉴 설명을 출력합니다. 메뉴 선택에서 0~3 까지 숫자를 입력 받아 메뉴 선택의...

read more
Blazor bootstrap theme sample

Blazor bootstrap theme sample

전체 소스 코드는 다음 Github 의 BlazorBootswatchTheme 폴더에 있습니다 https://github.com/kkomzi7179/BlazorWASMSample .net 으로 생성된 blazor wasm 기본 템플릿은 bootstrap 을 기반으로 하고 있습니다. 그리고 bootstratp 을 기반으로 다양한 테마를 제공하는 bootswatch 오픈소스 프로젝트가 있습니다. https://github.com/thomaspark/bootswatch MIT...

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