パッケージのセットアップ
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 タスクは、実行のたびに有効なライセンスを必要とします。パッケージは、次の順序でライセンスを探します。
- プロジェクトで設定されている場合は、
BabelLicenseプロパティ。 - プロジェクトフォルダーまたはその親フォルダーにある
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 を同じバージョンに保ってください。