NetBeauty2:. NETプロジェクトの出力ディレクトリをきれいにする

NetBeauty2:. NETプロジェクトの出力ディレクトリをきれいにする

NETプロジェクト開発では、プロジェクトの複雑さが増すにつれて、依存するdllファイルが増えていきます。これにより、出力ディレクトリが混乱し、管理や導入が容易ではありません。

最后更新 2024/03/12 5:14
沙漠尽头的狼
预计阅读 6 分钟
分类
.NET
标签
.NET C# 出力カタログ NetBeauty2

NETプロジェクト開発では、プロジェクトの複雑さが増すにつれて、依存するdllファイルが増えていきます。これにより、出力ディレクトリが混乱し、管理や導入が容易ではありません。NetBeauty2オープンソースプロジェクトは、開発者が. NETプロジェクトを独立してリリースするときに、. NETランタイムと依存するdllファイルを指定されたディレクトリに移動し、出力ディレクトリをよりクリーンでクリーンにするのに役立ちます。

1. NetBeauty2の紹介

NetBeauty2はオープンソースの. NET依存関係ライブラリ整理ツールであり、その主な役割は. NETプロジェクトが独立してリリースされるときに出力ディレクトリを整理して最適化することです。NetBeauty2を使用すると、開発者は. NETランタイムと依存するdllファイルを指定されたディレクトリに簡単に移動できるため、プロジェクトの出力ディレクトリがより明確で管理しやすくなります。

项目仓库地址:https://github.com/nulastudio/NetBeauty2

下图为优化后输出目录(.NET运行时及引用依赖库移到libraries目录,目录名可配置):

下图为极限优化后输出目录(查看 --hiddens 选项使用)

再来对比下未使用前输出目录(震撼吧!.NET运行时及相关依赖库全放在了根输出目录,.NET Framework可以配置privatePath,.NET Core可没那么方便):

2. サポートの状況

NetBeauty 2 NetCoreBeauty
支援フレームワーク .NET Framework .NET Core 3.0+ .NET Core 2.0+
導入モデルのサポート Framework-dependent deployment (FDD) Self-contained deployment (SCD) Framework-dependent executables (FDE) Self-contained deployment (SCD)
オペレーティングシステムのサポート All win-x64 win-x86 win-arm64(.NET 6+) linux-x64 linux-arm linux-arm64 osx-x64 osx-arm64(.NET 6+)
Need Patched HostFXR No Yes(if use patch) Yes
Minimum Structure ~20 Files ~8 Files(if use patch) ~8 Files
How It Works STARTUP_HOOKS AssemblyLoadContext.Resolving AssemblyLoadContext.ResolvingUnmanagedDll + patched libhostfxr(if use patch) additionalProbingPaths(if use patch) patched libhostfxr additionalProbingPaths
Shared Runtime Yes Possible If Using patched libhostfxr Alone

3. 使用方法は?

3.1.準備作業の準備

NuGetパッケージを. NET Coreプロジェクト(リリースが必要なメインプロジェクト)に追加します。

dotnet add package nulastudio.NetBeauty

打开工程文件编辑(.csproj):

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <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>

  <ItemGroup>
    <PackageReference Include="nulastudio.NetBeauty" Version="2.1.4.4" />
  </ItemGroup>

</Project>

运行 dotnet build 或者 dotnet publish, 优化输出操作会自动完成。

3.2.アプリケーションが公開された場合?

アプリがすでにリリースされている場合は、次のように使用できます(ウェブマスターは試していませんが、リリース後の補償として使用できます):

Usage:
nbeauty2 [--loglevel=(Error|Detail|Info)] [--srmode] [--enabledebug] [--usepatch] [--hiddens=hiddenFiles] [--noruntimeinfo] [--roll-forward=<rollForward>] [--apphostentry=<appHostEntry>] [--apphostdir=<appHostDir>] <beautyDir> [<libsDir> [<excludes>]]

例えば:

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

3.3. . NET Core Global Toolsとしての設定

dotnet tool install --global nulastudio.nbeauty

インストール後、プログラムがリリースされると自動的に適用されます。

4. 各種プロジェクトの利用例

克隆仓库(https://github.com/nulastudio/NetBeauty2),里面有各种模版项目使用示例:

テストプロジェクト名 説明書の作成
WPFTest WPFプロジェクトWinformと同様、既定の. NET 5
WebAppTest RazorPagesプロジェクト、デフォルトの. NET 6
NetFxTest NET Framework WPFプロジェクト(. NET 4.x、Winform同様)
ChromelyTest Chromelyの. NETプロジェクトを参照。
AvaloniaTest Avalonia UIプロジェクト、デフォルト. NET 5

小さな知識1。

Chromely NuGetパッケージは、クロスプラットフォームデスクトップアプリケーションを作成するためのライブラリで、Chromiumベースのブラウザコントロールを提供します。Chromelyを使用すると、開発者はHTML、CSS、Java ScriptなどのWebテクノロジを使用して、ローカルシステムリソースへのアクセスを維持しながらデスクトップアプリケーションのユーザーインターフェイスを構築できます。

Chromely NuGetパッケージはAPIとツールの完全なセットを提供し、開発者は大幅なコードの書き直しや変更を必要とせずにWebアプリケーションをデスクトップアプリケーションに簡単に変換できます。また、さまざまなプラグインや拡張機能をサポートしているため、開発者は必要に応じて追加機能を追加したり、既存機能をカスタマイズできます。

さらに、ChromelyはC#、. NET Core、ASP.NET Coreなどの複数のプログラミング言語やフレームワークをサポートしているため、開発者はアプリケーションを構築するために最も使い慣れたテクノロジースタックを選択できます。

小さな知識2。

Avalonia UIはクロスプラットフォームの. NET UIフレームワークで、開発者はXAMLとC#言語を使用して、Windows、Linux、macOS、iOS、Android、Web Assemblyを含む複数のプラットフォームで動作するアプリケーションを作成できます。Avalonia UIは、開発者が美しくモダンなGUIグラフィカルユーザーインターフェイスを構築できるように設計されています。. NET Standard 2.0をサポートするすべてのプラットフォームと互換性があり、開発者は単一のコードベースから複数のオペレーティングシステム用のネイティブアプリケーションを作成できます。Avalonia UIを使用することで、開発者は. NETエコシステムのパワーを活用しながら、クロスプラットフォーム互換性を実現し、開発コストを削減し、生産性を向上できます。

推荐开源控件库:irihitech/Semi.Avaloniairihitech/Ursa.Avalonia

5. まとめまとめまとめ

林德熙大佬分享过类似的包NuGet Gallery | dotnetCampus.PublishFolderCleaner 3.11.1,但该库说明只在Windows发布支持,大家可以对比使用,原文链接:PublishFolderCleaner 让你的 dotnet 应用发布文件夹更加整洁 - lindexi - 博客园 (cnblogs.com),再次给出本文介绍库NetBeauty2开源地址:

项目仓库地址:https://github.com/nulastudio/NetBeauty2

参考文献より:

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2026/04/22

バージョン別の. NETサポート状況(250 7 0 7更新)

仮想マシンとテストマシンを使用して、各バージョンのオペレーティングシステムの. NETサポートをテストします。オペレーティングシステムのインストール後、対応するランタイムを測定し、スターダストエージェントをパスとして実行できます。

继续阅读
同分类 / 同标签 2026/02/07

AOTの使用経験

プロジェクトの最初から、新しい機能が追加されたり、新しい構文が使用されたりするたびに、AOTリリーステストを行うという良い習慣を身につける必要があります。

继续阅读