トラブルシューティング
一般
最新バージョンの Dotfuscator を使用していますか?
既に修正されている問題が発生する可能性があります。
サード パーティ製のアセンブリはすべて難読化の対象から除外されていますか?
サード パーティ製のアセンブリを含んでいるパッケージを処理する場合は、一般的に、サード パーティ製アセンブリ自体は難読化しないことをお勧めします。 このようなサード パーティ製のアセンブリを除外する方法については、パッケージ アセンブリを処理から除外する/処理に含めるを参照してください。
MSBuild ターゲットを介して Visual Studio プロジェクトに Dotfuscator を統合している場合には除外が自動的に行われることに注目してください。
Visual Studio ビルドまたは MSBuild のエラー
このセクションでは、アプリケーションの保護に関する手順を実行する場合など、Visual Studio または MSBuild プロジェクトが Dotfuscator の MSBuild ターゲットを使用しているときに発生する問題について説明します。
Dotfuscator でインポートするものがインストールされていますか?
次のようなステートメントを使用して、プロジェクト ファイル(.csproj
)で MSBuild ターゲットをインポートする場合は、
<Import Project="...\PreEmptive.Dotfuscator.Common.targets"/>
プロジェクトが Visual Studio で読み込まれ MSBuild でビルドされる前に、MSBuild ターゲット ファイルをインストールしておく必要があります。
開発者環境を使用する場合は、インストール手順に従い、忘れずに、Visual Studio のインストレーションの Visual Studio 統合機能を有効にしてください。
ビルド エージェントでビルドしている場合、Dotfuscator の最適なインストール方法については、ビルド エージェントの考慮事項を参照してください。
問題は Dotfuscator で発生していますか?
Dotfuscator を有効にしないプロジェクトの構成を作成します。 エラーが続く場合は、問題が Dotfuscator 以外のもので発生している可能性があります。
より多くの情報の入手
「Dotfuscator は失敗または終了し、エラー コードが出力された」という旨の一般的なエラーが表示された場合に、より多くの情報を入手するには、次の手順を実行します。
Visual Studio(または MSBuild の
/v
スイッチ)を使ってビルドの出力の詳細を標準(以上の詳細レベル)に設定することで、プロジェクトのビルド出力の中で Dotfuscator のビルド出力を確認するDotfuscator 構成ファイル内でビルドの進行状況設定値を "詳細な情報を表示する" に設定することで、Dotfuscator からの追加出力を確認する
.NET Core および .NET Standard のビルド エラー
error MSB4019: The imported project "C:\Program Files\dotnet\sdk\2.1.504\PreEmptive\Dotfuscator\4\PreEmptive.Dotfuscator.Common.targets" was not found.Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4062: The "FindProjectAssemblies" task could not be loaded from the assembly C:\SomePath\PreEmptive\Dotfuscator\4\PreEmptive.Dotfuscator.Internal.Tasks.dll.Could not load file or assembly 'Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.The system cannot find the file specified.Confirm that the declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.
これらのエラーは、.NET Core コマンド(dotnet build
/ dotnet msbuild
/ dotnet publish
)を使用していると同時に、Dotfuscator が Visual Studio プロジェクト ファイルに統合されている場合に発生します。Windows 上の Visual Studio および MSBuild は、Dotfuscator を使用してこのようなプロジェクトを保護できますが、.NET Core コマンドは現在サポートされていません。詳細については、アプリケーションの保護を参照してください。
Dotfuscator 処理エラー
このセクションでは、アプリケーションが Dotfuscator で処理されるときに発生する問題について説明します。
Dotfuscator が参照アセンブリを見つけられませんか?
- コマンド ラインから
/v /e /bindlog=true
オプションを指定して実行し、Dotfuscator が探し回る場所について追加情報を取得します。 - 見つからなかったパスをユーザー定義のアセンブリ ロード パスに追加します。Dotfuscator の XML 構成ファイル、または Dotfuscator 構成エディターの[設定]タブで追加できます。
Dotfuscator スタック トレースの取得
Dotfuscator でエラーが発生した場合は、コマンド ラインから /v /e
オプション付きで実行することにより、Dotfuscator のスタック トレースを取得します。
DotfuscatorAndroidSigningCertFingerprint エラー
エラー : 改ざんチェックを Xamarin Android アプリケーションに差し込むには、署名証明書の SHA-1 指紋を指定する必要があります。
MSBuild プロパティの DotfuscatorAndroidSigningCertFingerprint をこの値に設定してください。
このエラーは、アプリケーションへの署名に使用する証明書の SHA-1 指紋を指定することで修正できます。 この値を指定する方法は 2 つあります。
MSBuild ターゲット ファイルを使用して Dotfuscator と統合している場合は、Xamarin Android アプリケーションのプロジェクト ファイルにある
DotfuscatorAndroidSigningCertFingerprint
プロパティの値を設定します。 ご自分のプロジェクト ファイルでこのプロパティを設定する場所の例については、「アプリケーションの保護」ページにある Xamarin セクションを参照してください。別の方法で Dotfuscator と統合している場合、Dotfuscator 構成エディターで
AndroidSigningCertFingerprint
という新たな構成プロパティに値を設定します。
アクティブ化エラー
このセクションでは、Dotfuscator をアクティブ化するときに発生する問題について説明します。
Dotfuscator がアクティブ化されていません
コマンド ライン ビルドを実行するためには、Dotfuscator Professional を登録する必要があります。Dotfuscator 構成エディターを実行して、ライセンス キーを入力してください。
当コンピューターで Dotfuscator をアクティブ化していない場合は、このエラーが発生します。 詳細については、アクティブ化を参照してください。
以前に使用されたシリアル番号
This serial number (...) has previously been used to register. Please contact support@preemptive.com for registration assistance or to purchase additional licenses.
Dotfuscator をアクティブ化しようとしたとき、お客様のライセンスが追加コンピューターでのアクティブ化を許可しないものである場合には、このエラーが発生します。
このエラーが自動ビルドのログに示されている場合は、DOTFUSCATOR_LICENSE
環境変数または引数を使用して、Dotfuscator をアクティブ化している可能性があります。
動的にプロビジョニングされたビルド エージェントでビルドを実行する場合は、ビルド ジョブごとに新しいコンピューターをライセンスに登録します。
このような場合は、フローティング ライセンスを使用する必要があります。他の種類のライセンスでは、上記のエラーが発生します。
ライセンスの詳細については、PreEmptive Solutions にご連絡ください。
インターネット接続の問題
アクティブ化サーバー "..." への到達に関する問題があります。このライセンスの種類は、ビルドする前に PreEmptive アクティブ化サーバーへのアクセスを必要とします。PreEmptive サポートにお問い合わせください。
エラー: このライセンスのサブスクリプションを確認できませんでした。"..."このライセンスの種類は、ビルドする前に PreEmptive サブスクリプション サーバーへのアクセスを必要とします。PreEmptive サポートにお問い合わせください。
これらのエラーは、フローティング ライセンスを使用してアクティブ化したりビルドを実行したりする場合に、PreEmptive Solutions のサーバーへの接続に関するネットワーク問題が原因で発生します。 このような場合は、インターネット接続が必要です。Dotfuscator はエラーを発行する前に一度、失敗した接続を再試行します。
ランタイム エラー
一般的なアドバイス
大部分のアプリケーションは、保護しても、追加されたすべてのチェックを禁止することで、保護されていないバージョンと同じ動作を行います。 ただし、Dotfuscator による難読化によってランタイム エラーが発生するケースがあります。 このようなケースのうち、一部は Dotfuscator のスマート難読化機能の静的分析によって検出できますが、残りのケースを検出するには手動による構成が必要です。
ランタイム エラーは通常、名前の変更による難読化に関係しています。 たとえば、メソッドの名前が含まれる文字列をコードでリフレクション API に渡す場合、この呼び出しは保護を行った後では失敗する可能性があります。その理由は、そのメソッドが Dotfuscator によって名前変更されたのに、その文字列に依然として古い名前が含まれているためです。 この場合、そのメソッドを名前の変更対象から除外するように Dotfuscator を構成することができます。 ランタイム エラーを発見して名前変更からの適切な除外を適用するケース スタディを、名前変更の対象除外の特定で参照してください。
似たエラー/問題が発生するのは、Dotfuscator の除去機能が有効になっているのに、静的分析では実行時に使用されるコードの一部を認識できない場合です。 この種の問題を解決するには、保護されたアセンブリ内の特定のメソッドを常に名前の変更対象にするように Dotfuscator を構成します。
どの変換が問題を起こしていますか?
どの変換が問題の原因となっているかを調査します。
- すべての難読化の変換がオフになっている場合、それは機能しますか?
- すべての入力アセンブリでライブラリ モードが有効になっている場合、それは機能しますか?
- すべての入力アセンブリで XAML の変換がオフになっている場合、それは機能しますか?
- 実行時エラーはほとんどの場合、名前の変更に関係しています。
- 依存するプロパティ:そのプロパティとすべてのバッキング メソッドは、名前の変更対象から除外されていますか?
- プロパティの対象除外のあらゆる状況に対応できるカスタム規則で機能しますか?
<type name=".\*" regex="true"> <propertymember name=".\*" regex="true"/> </type>
アプリケーションは正しく署名/登録されていますか?
詳細については、Dotfuscator の構成エディターの概要に関するページの署名に関するセクションをお読みください。
[警告]タブのチェック
[警告]タブにあるすべての警告を確認しましたか?
Dotfuscator のビルドで警告が発生した場合は、構成エディターの下部にある[ビルド出力]セクションにおいて、警告が独自のタブに表示されます。
実行時の例外のキャッチ
実行時の例外をキャッチし、それをメッセージ ボックスに表示して、実際に何が間違っているかを確認します。
保護の強化
Dotfuscator の保護を強化する方法の詳細については、保護の強化を参照してください。
なぜ、こんなに少しのものしか名前が変更されなかったのでしょうか?
アセンブリがライブラリ モードになっている場合、Dotfuscator は、そのアセンブリの公開され利用できるインターフェイスの一部であるものついては、名前を変更しません。
次のような場合には、ライブラリ モードをオフにすることができます。
- アセンブリが、他のアセンブリからライブラリとして利用できるように作られていない場合
- または、ライブラリとそのすべての依存アセンブリを同じ Dotfuscator 構成で一緒に処理する場合
ライブラリ モードはアセンブリ単位の設定であることを覚えておいてください。 一部のアセンブリではライブラリ モードを使用し、それ以外のアセンブリではライブラリ モードをオフにすることによって、より強力な難読化を得られるようにするというシナリオを考案することもできます。
なぜ、設定した変換が実行されないのでしょうか?
変換タブ([名前の変更]、[制御フロー]、[文字列の暗号化]など)のいずれかを開いて、変換のオプションを構成し、Dotfuscator 構成を作成しても、変換の効果があるように見えないことがあります。
これは、変換自体がオフになっている可能性があります。
- [設定]タブを開きます。
- 左側のナビゲーション パネルで[グローバル オプション]を選択します。
- 右側のパネルで[機能]セクションを調べます。
変換をオンまたはオフにするプロパティは、二重否定で表現されていることに留意してください。 そのため、[制御フローを無効にする]を "はい" に設定すると、その変換はオフになり、"いいえ" に設定すると変換はオンになります。