NetBeauty 2 - .NET Framework 및 .NET Core 앱의 런타임 구성 요소 및 종속성을 하위 디렉토리로 이동

아래의 질문글의 내용에 가장 적합한 솔루션인 것 같아 공유 합니다.

NetBeauty 2는 Self-contained 및 프레임 종속 배포(FDD) 및 프레임 종속 실행파일(FDE) 모두에서 사용할 수 있으며 위의 사례처럼 dll파일이 많거나 Self-contained로 인해 파일 목록이 지저분하다고 느끼는 분들을 위한 솔루션입니다.

NetBeauty 2을 이용하려면 다음 처럼 프로젝트에 패키지를 포함 시킨 후

dotnet add package nulastudio.NetBeauty

csproj에 관련 설정을 하는 것으로 간단히 구성이 됩니다.

....
 <PropertyGroup>
    <BeautySharedRuntimeMode>False</BeautySharedRuntimeMode>
    <!-- beauty into sub-directory, default is libs, quote with "" if contains space  -->
    <BeautyLibsDir Condition="$(BeautySharedRuntimeMode) == 'True'">../libraries</BeautyLibsDir>
    <BeautyLibsDir Condition="$(BeautySharedRuntimeMode) != 'True'">./libraries</BeautyLibsDir>
    <!-- dlls that you don't want to be moved or can not be moved -->
    <!-- <BeautyExcludes>dll1.dll;lib*;...</BeautyExcludes> -->
    <!-- dlls that end users never needed, so hide them -->
    <!-- <BeautyHiddens>hostfxr;hostpolicy;*.deps.json;*.runtimeconfig*.json</BeautyHiddens> -->
    <!-- set to True if you want to disable -->
    <DisableBeauty>False</DisableBeauty>
    <!-- set to False if you want to beauty on build -->
    <BeautyOnPublishOnly>False</BeautyOnPublishOnly>
    <!-- DO NOT TOUCH THIS OPTION -->
    <BeautyNoRuntimeInfo>False</BeautyNoRuntimeInfo>
    <!-- set to True if you want to allow 3rd debuggers(like dnSpy) debugs the app -->
    <BeautyEnableDebugging>False</BeautyEnableDebugging>
    <!-- the patch can reduce the file count -->
    <!-- set to False if you want to disable -->
    <!-- SCD Mode Feature Only -->
    <BeautyUsePatch>True</BeautyUsePatch>
    <!-- App Entry Dll = BeautyDir + BeautyAppHostDir + BeautyAppHostEntry -->
    <!-- see https://github.com/nulastudio/NetBeauty2#customize-apphost for more details -->
    <!-- relative path based on AppHostDir -->
    <!-- .NET Core Non Single-File Only -->
    <!-- <BeautyAppHostEntry>bin/MyApp.dll</BeautyAppHostEntry> -->
    <!-- relative path based on BeautyDir -->
    <!-- .NET Core Non Single-File Only -->
    <!-- <BeautyAppHostDir>..</BeautyAppHostDir> -->
    <!-- <BeautyAfterTasks></BeautyAfterTasks> -->
    <!-- valid values: Error|Detail|Info -->
    <BeautyLogLevel>Info</BeautyLogLevel>
    <!-- set to a repo mirror if you have troble in connecting github -->
    <!-- <BeautyGitCDN>https://gitee.com/liesauer/HostFXRPatcher</BeautyGitCDN> -->
    <!-- <BeautyGitTree>master</BeautyGitTree> -->
  </PropertyGroup>

CLI 도구로도 지원 하며

dotnet tool install --global nulastudio.nbeauty

이미 배포된 대상도 적용 가능합니다.

ncbeauty2 --usepatch --loglevel Detail --hiddens "hostfxr;hostpolicy;*.deps.json;*.runtimeconfig*.json" /path/to/publishDir libraries "dll1.dll;lib*;..."

이 것을 이용한 출력은 Self-contained 였을 때 (기본 설정) 다음처럼 배포가 됩니다.

image

--hiddens 옵션을 줬을 경우 좀 더 깔끔해진다고 하는데 .NET 9에서는 반영은 안되는 것 같아요.


6 Likes