Skip to Content
新しいバージョン 12 を公開しました 🎉
ObfuscatorNuGet パッケージパッケージのセットアップ

パッケージのセットアップ

Babel.Obfuscator パッケージをビルドで利用できるようにし、プロジェクトから参照し、ライセンスをアクティベートして、最初の難読化ビルドを検証する方法を説明します。

パッケージのホスティング

Babel の NuGet パッケージは、nuget.org では公開されていません。Babel.Obfuscator を参照するすべてのビルドが、自分で管理するフィードからパッケージを復元できる必要があります。

  • プライベートフィード:Azure Artifacts、GitHub Packages、GitLab、MyGet、自前でホストする NuGet サーバーなど。ビルドサーバーやチームに適した選択です。GitHub Actions のサンプルでは、パッケージを GitHub Packages にプッシュする方法と、復元のステップをトークンで認証する方法を示しています。
  • ローカルフォルダー:パッケージソースとして登録したフォルダー。開発用コンピューターが 1 台だけの場合は、これで十分です。

どちらの方法も、インストールで手順を追って説明しています。どちらを選んでも、フィードの構成はソリューションの隣の NuGet.config ファイルに保存し、CI エージェントを含むすべてのコンピューターで dotnet restore がパッケージを見つけられるようにしてください。

<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> <add key="babel" value="https://nuget.pkg.github.com/YOUR_ORG/index.json" /> </packageSources> </configuration>

パッケージ参照の追加

Visual Studio から

「Solution Explorer」でプロジェクトを右クリックし、「Manage NuGet Packages…」を選択します。Babel のパッケージをホストしているパッケージソースを選択し、Babel.Obfuscator をインストールします。Visual Studio は、正しいメタデータを持つ PackageReference をプロジェクトファイルに追加します。

dotnet CLI から

dotnet add package Babel.Obfuscator

プロジェクトファイルの編集

.csproj ファイルまたは .vbproj ファイルに、次の項目を追加します。

<ItemGroup> <PackageReference Include="Babel.Obfuscator" Version="12.0.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> </ItemGroup>

この 2 つのメタデータ要素は重要です。

  • PrivateAssets を all に設定すると、パッケージが開発用の依存関係としてマークされ、このプロジェクトを参照するプロジェクトやパッケージには伝播しません。
  • IncludeAssets は build アセットを取り込みます。パッケージの .props ファイルと .targets ファイルは、このアセットに含まれています。一覧に build がないと、Babel タスクがプロジェクトに組み込まれず、何も難読化されません。

PackageReference を手作業で記述する場合は、必ず上記のメタデータを含めてください。メタデータなしでパッケージを参照すると、Babel のツールがアセンブリの参照として追加され、ビルドが難読化されないままになることがあります。

1 つのソリューション内の複数のプロジェクト

参照を繰り返さずに複数のプロジェクトを難読化するには、リポジトリのルートにある Directory.Build.props ファイルに参照を記述します。条件を付けることで、テストプロジェクトや、配布しないその他のプロジェクトを対象から外せます。

<Project> <ItemGroup Condition="!$(MSBuildProjectName.EndsWith('.Tests'))"> <PackageReference Include="Babel.Obfuscator" Version="12.0.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> </ItemGroup> </Project>

中央パッケージ管理 を使用している場合は、Directory.Packages.props の PackageVersion 項目でバージョンを 1 回だけ宣言し、PackageReference から Version 属性を削除します。

ライセンスのアクティベーション

Babel タスクは、実行のたびに有効なライセンスを必要とします。パッケージは、次の順序でライセンスを探します。

  1. プロジェクトで設定されている場合は、BabelLicense プロパティ。
  2. プロジェクトフォルダーまたはその親フォルダーにある babel.licenses ファイル。そのため、ライセンスファイルをソリューションファイルの隣にコピーするだけで、ソリューション内のすべてのプロジェクトに適用されます。

BabelLicense は、コマンドラインの --license スイッチと同じ値を受け付けます。ライセンスファイルのパス、ライセンスキー、またはフローティングライセンスのユーザーキーです。

<PropertyGroup> <!-- A license file --> <BabelLicense>$(MSBuildThisFileDirectory)build\babel.licenses</BabelLicense> <!-- or a license key held in an environment variable (a build server secret) --> <BabelLicense>$(BABEL_LICENSE)</BabelLicense> <!-- or a floating license user key --> <BabelLicense>floating:P1N1J-EH5VA-VGSFU-7EOK8</BabelLicense> </PropertyGroup>

ビルドサーバーでは、キーをリポジトリに含めないでください。GitHub Actions のサンプルのように、キーをシークレットとして保存し、環境変数としてビルドステップに渡して、その変数を BabelLicense から参照します。フローティングライセンスについては、製品のアクティベーションで説明しています。

ライセンスファイルは、製品のバージョンに紐付いています。パッケージを新しいバージョンにアップデートするときは、そのバージョンに付属していたライセンスファイルをインストールしてください。バージョン 11.8 以降では、明示的に指定されたライセンスが実行中のバージョンに対して有効でない場合、暗黙のうちに評価モードへフォールバックするのではなく、エラーでビルドが停止します。

評価モード

ライセンスが見つからない場合、Babel は評価モードで動作します。シンボルのリネームだけが適用され、難読化されたアセンブリは短期間で動作しなくなります。これは、ビルドログの警告 W00000 で報告されます。そのようなアセンブリがビルドサーバーの外に出ないようにするには、この警告をエラーにします。

<PropertyGroup> <BabelWarningsAsErrors>W00000</BabelWarningsAsErrors> </PropertyGroup>

ビルドと検証

Visual Studio、dotnet build、msbuild のいずれかで、通常どおりプロジェクトをビルドします。Babel のログは、VerboseLevel で設定した詳細レベル(既定は 1)でビルド出力に書き出されます。

dotnet build -c Release

Visual Studio に表示された Babel Obfuscator の出力

パッケージが Babel をどのように呼び出しているかを正確に確認するには、BabelProvideCommandLineArgs を true に設定します。完全なコマンドラインがログに書き出され、@(BabelCommandLineArgs) 項目に格納されます。これは、コマンドラインツールでビルドの問題を再現するのに役立ちます。GenerateLogFile は、難読化の完全なログを、ターゲットアセンブリの隣のファイル、または BabelLogFile で設定したパスに書き出します。

出力が難読化されていることを確認するには、ビルドされたアセンブリをデコンパイラーで開くか、Babel のログの最後に出力される統計を確認します。Babel は、コンパイラーが中間フォルダー obj に書き出したアセンブリを処理するため、bin と公開フォルダーにあるコピーはすべて難読化されています。ビルドパイプラインを参照してください。

特定の構成での難読化の無効化

Debug ビルドで難読化が必要になることは、ほとんどありません。Debug 構成で BabelEnabled を false に設定すると、パッケージは公開時の調整も含め、Babel のすべてのステップをスキップします。

<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> <BabelEnabled>false</BabelEnabled> </PropertyGroup>

難読化なしのビルドを 1 回だけ実行する場合は、同じプロパティをコマンドラインから切り替えることもできます。

dotnet build -c Release -p:BabelEnabled=false

パッケージのアップデート

Babel のリリースごとに、新しいバージョンのパッケージが新しいライセンスファイルとともに提供されます。アップデートの手順は次のとおりです。

新しいパッケージをプッシュする

新しい Babel.Obfuscator パッケージをフィードにプッシュします。

バージョンを上げる

PackageReference の Version 属性、または PackageVersion のエントリのバージョンを上げます。

ライセンスファイルを置き換える

babel.licenses を、新しいバージョンと一緒に受け取ったファイルに置き換えます。

両方を使用する場合は、Babel.Obfuscator と Babel.Obfuscator.Tool を同じバージョンに保ってください。

Last updated on