一般
最新バージョンの Dotfuscator を使用していますか?
既に修正されている問題が発生する可能性があります。
サード パーティ製のアセンブリはすべて難読化の対象から除外されていますか?
サード パーティ製のアセンブリを含んでいるパッケージを処理する場合は、一般的に、サード パーティ製アセンブリ自体は難読化しないことをお勧めします。 このようなサード パーティ製のアセンブリを除外する方法については、パッケージ アセンブリを処理から除外する/処理に含めるを参照してください。
MSBuild ターゲットを介して Visual Studio プロジェクトに Dotfuscator を統合している場合には除外が自動的に行われることに注目してください。
Visual Studio ビルドまたは MSBuild のエラー
このセクションでは、アプリケーションの保護に関する手順を実行する場合など、Visual Studio または MSBuild プロジェクトが Dotfuscator の MSBuild ターゲットを使用しているときに発生する問題について説明します。
Dotfuscator でインポートするものがインストールされていますか?
次のように <Import>
タグなどを使用して、プロジェクト ファイル(.csproj
、.vbproj
など)で MSBuild ターゲットをインポートする場合は、
<Import Project=".../PreEmptive.Dotfuscator.Common.targets"/>
プロジェクトが Visual Studio で読み込まれ MSBuild でビルドされる前に、MSBuild ターゲット ファイルをインストールしておく必要があります。 Windows インストーラーまたは NuGet パッケージを使用してインストールすることができます。
Dotfuscator をインストールしても、まだプロジェクトの読み込みやビルドができない場合は、ターゲット ファイルのインポート元のディレクトリを確認します。ディレクトリは、プロジェクトを読み込みまたはビルドしようとしたときのエラー メッセージに表示されています。
error MSB4019: The imported project "C:\Program Files\MSBuild\PreEmptive\Dotfuscator\7\PreEmptive.Dotfuscator.Common.targets" was not found.
Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
正しいディレクトリはインストール方法によって異なります。説明は、MSBuild コンポーネントの場所を参照してください。
また、ディレクトリは、同じプロジェクトの複数の開発者環境およびビルド環境で異なる可能性があるため、本ユーザー ガイドでは、MSBuild プロパティの DotfuscatorMSBuildDir
を使用してディレクトリのパスを格納することをお勧めしていることに留意してください。 たとえば、次のような <Import>
ステートメントをお勧めします。
<Import Project="$(DotfuscatorMSBuildDir)/PreEmptive.Dotfuscator.Common.targets"/>
プロジェクトが DotfuscatorMSBuildDir
または類似するプロパティを使用しており、エラー メッセージ内のディレクトリが間違っているようである場合は、プロパティの設定方法を確認します。 設定できる場所は次のとおりです。
-
プロジェクト ファイル自体。 次の例では、プロパティがまだ設定されていない場合は、プロパティを Windows インストーラーがターゲット ファイルを配置するディレクトリに設定しています。
<PropertyGroup> <DotfuscatorMSBuildDir Condition="'$(DotfuscatorMSBuildDir)' == ''">$(MSBuildProgramFiles32)/MSBuild/PreEmptive/Dotfuscator/7</DotfuscatorMSBuildDir> </PropertyGroup>
-
別の MSBuild プロパティ、またはプロジェクト ファイルによってインポートされたターゲット ファイル。 次の例では、現在のユーザーのディレクトリ(
USERPROFILE
またはHOME
環境変数で指定)で検出された.dotfuscator.user.props
ファイルをインポートしています。<Import Project="$([System.Environment]::GetFolderPath(SpecialFolder.UserProfile))/.dotfuscator.user.props" Condition="Exists('$([System.Environment]::GetFolderPath(SpecialFolder.UserProfile))/.dotfuscator.user.props')"/>
-
Directory.Build.props
またはDirectory.Build.targets
ファイル。 -
MSBuild にプロパティとして公開されている環境変数。 (プロパティ名では大文字と小文字が区別されないことに留意してください。)
-
msbuild
またはdotnet
を呼び出すときのコマンド ライン変数。
問題は Dotfuscator で発生していますか?
Dotfuscator を有効にしないプロジェクトの構成を作成します。 エラーが続く場合は、問題が Dotfuscator 以外のもので発生している可能性があります。
より多くの情報の入手
「Dotfuscator は失敗または終了し、エラー コードが出力された」という旨の一般的なエラーが表示された場合に、より多くの情報を入手するには、次の手順を実行します。
-
Visual Studio(または MSBuild の
-v
スイッチ)を使ってビルドの出力の詳細を標準(以上の詳細レベル)に設定することで、プロジェクトのビルド出力の中で Dotfuscator のビルド出力を確認する -
Dotfuscator 構成ファイル内でビルドの進行状況設定値を "詳細な情報を表示する" に設定することで、Dotfuscator からの追加出力を確認する
Dotfuscator MAUI プロジェクト
複数のプラットフォームをターゲットとする MAUI プロジェクトをビルドする場合、並列プロジェクトのビルド数は 1 つに制限する必要があります。
DotfuscatorIncludeAsInput のエラーと警告
このセクションでは DotfuscatorIncludeAsInput
プロジェクト プロパティおよびメタデータによって発生する一般的なエラーと警告について説明します。 この機能の使用方法の詳細については、保護するアセンブリの制御を参照してください。
-
アセンブリ "X.dll" への参照には、競合する 'DotfuscatorIncludeAsInput' メタデータが含まれています。
2 つの
Reference
項目が、DotfuscatorIncludeAsInput
の異なる値を持つ同一のアセンブリを参照する場合にこのエラーが発生します。 たとえば、プロジェクト ファイル A には次が含まれます。<Reference Include="ExternalAssembly"> <HintPath>../path/to/the/assembly/ExternalAssembly.dll</HintPath> <!-- Dotfuscator への入力として含まれるアセンブリ --> <DotfuscatorIncludeAsInput>true</DotfuscatorIncludeAsInput> </Reference>
一方、プロジェクト ファイル B には次が含まれます。
<Reference Include="ExternalAssembly"> <HintPath>../path/to/the/assembly/ExternalAssembly.dll</HintPath> <!-- Dotfuscator への入力として含まれないアセンブリ --> <DotfuscatorIncludeAsInput>false</DotfuscatorIncludeAsInput> </Reference>
このような場合、"競合する 'DotfuscatorIncludeAsInput' メタデータ" エラーが生成されます。
この問題を解決するには、アセンブリを保護する必要があるかどうかを判断し、問題となっている
DotfuscatorIncludeAsInput
メタデータの値を、どこで参照されても正しい値に変更する必要があります。 -
'X.csproj' を (直接的または間接的に) 参照するプロジェクトのうち、'DotfuscatorIncludeAsInput' プロパティを 'false' に設定しているものもあれば、設定していないものもあります。
この警告が発生するのは、プロジェクトが、保護されたアセンブリおよび難読化の対象から除外されたアセンブリの両方で参照されたときです。
たとえば、保護されているプロジェクト A と保護されてないプロジェクト B があり、その両プロジェクトがプロジェクト C を参照するとします。 プロジェクト C は保護されたプロジェクトによって参照されるので、既定では Dotfuscator によってプロジェクト C が保護されます。 ただし、名前変更が有効になっていると、プロジェクト B からプロジェクト C への参照では問題が発生する可能性があります。なぜなら、プロジェクト B は名前変更されているメソッドやプロパティを参照しようとするからです。
すべての問題を回避するには、共有プロジェクトに対してライブラリ モードを有効にするか、または共有プロジェクトを Dotfuscator から除外します。
<!-- In ProjC.csproj --> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <DotfuscatorIncludeAsInput>false</DotfuscatorIncludeAsInput> </PropertyGroup> </Project>
-
プロジェクト 'ProjA.csproj' の ProjectReference '../ProjB/ProjB.csproj' に DotfuscatorIncludeAsInput が設定されましたが、Dotfuscator は ProjectReference 項目のこのメタデータを使用しません。
このエラーは、
DotfuscatorIncludeAsInput
メタデータをProjectReference
項目へ追加したときに発生します。 現在、この機能はサポートされません。 プロジェクトを保護の対象から除外するには、ProjectReference
項目からDotfuscatorIncludeAsInput
メタデータを削除します。<!-- In ProjA.csproj --> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <ProjectReference Include=".../path/to/ProjectFile.csproj"> <!-- 次の行を削除します: --> <DotfuscatorIncludeAsInput>false</DotfuscatorIncludeAsInput> </ProjectReference> </ItemGroup> </Project>
次に、参照されたプロジェクトで、
DotfuscatorIncludeAsInput
プロパティをすべてのPropertyGroup
要素へ追加します。<!-- In ProjB.csproj --> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <!-- 次の行を追加します: --> <DotfuscatorIncludeAsInput>false</DotfuscatorIncludeAsInput> </PropertyGroup> </Project>
-
プロジェクト 'Proj.csproj' の PackageReference 'PackageName' に DotfuscatorIncludeAsInput が設定されましたが、本バージョンの Dotfuscator は、NuGet パッケージを入力として含めることをサポートしていません。
このエラーは、
DotfuscatorIncludeAsInput
メタデータをPackageReference
項目へ追加したときに発生します。 参照される NuGet パッケージから生成されたアセンブリを保護することは現在サポートしていません。PackageReference
項目からDotfuscatorIncludeAsInput
メタデータを削除してください。<!-- In Proj.csproj --> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <PackageReference Include="PackageName" Version="1.2.3"> <!-- 次の行を削除します: --> <DotfuscatorIncludeAsInput>true</DotfuscatorIncludeAsInput> </PackageReference> </ItemGroup> </Project>
メモ: Visual Studio プロジェクトで NuGet パッケージを作成している場合、そのプロジェクトに Dotfuscator の MSBuild ターゲットを統合することはできるので、アセンブリは NuGet パッケージにパッケージ化される前に保護されます。
Dotfuscator 処理エラー
このセクションでは、アプリケーションが Dotfuscator で処理されるときに発生する問題について説明します。
Dotfuscator は Null 許容参照型を保護することができません
- この問題を修正するには、
force_nuget_tools
をグローバル オプションとして構成ファイルに追加します。
<dotfuscator version="2.3">
<global>
<!-- その他のオプション タグ -->
<option>force_nuget_tools</option>
</global>
<!-- その他のタグ-->
</dotfuscator>
このオプションは、Dotfuscator で .NET Framework 4.x に付属するライブラリに依存するのではなく、より新しいバージョンの ILasm および ILdasm NuGet パッケージを使用させることができます。
Dotfuscator が参照アセンブリを見つけられませんか?
-
コマンド ラインから
-v -e -p=bindlog=true
オプションを指定して実行し、Dotfuscator が探し回る場所について追加情報を取得します。 - 見つからなかったパスをユーザー定義のアセンブリ ロード パスに追加します。Dotfuscator の XML 構成ファイル、または Dotfuscator 構成エディターの[設定]タブで追加できます。
Dotfuscator が ILasm/ILdasm を見つけられません
このセクションでは以下のエラーや警告を解決します。
"C:\Sample\SampleApp.dll" 用の適切なツール [ILdasm] が見つかりませんでした。『Dotfuscator ユーザー ガイド』の「トラブルシューティング」セクションを参照してください。
ビルド エラーです。
Loading C:\Sample\SampleApp.exe
アセンブリ C:\Sample\SampleApp.exe で実行するための ildasm の互換バージョンが見つかりませんでした。 このアセンブリは .NET Framework v4.0.30319 でビルドされています。
ビルド エラーです。
警告: ツールの調査中に無効なパスを検出しました。該当するパスは "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\x64\" と ildasm.exe でした。エラーは '"Illegal characters in path."(パスに無効な文字が含まれています。) でした。無視して検索を続行します。詳細については、"toollog" という名前の構成プロパティを定義して、Dotfuscator を再実行してください。
これらのメッセージは、特定のアセンブリを処理するために必要な IL 逆アセンブラーおよびアセンブラー ツール(ILdasm および ILasm)を見つける Dotfuscator での問題を示します。 Dotfuscator がこれらのツールを見つける方法については、 外部ツールの検索を参照してください。
この種の問題を調査、解決するための方法は次のとおりです。
- 問題に関する追加情報を得るために、追加ログを有効にするには、ビルドの進行状況に "詳細な情報を表示する" を設定するよう Dotfuscator 構成ファイルを編集し、値が空ではない
toollog
という名前のプロパティを追加した後で、Dotfuscator ビルドを再実行します。- また、コマンド ラインから実行している場合は、引数として
-v -p:toollog=true
を追加します。 - MSBuild または Visual Studio 経由でビルドしている場合は、MSBuild の出力の詳細レベルを上げる必要もあるかもしれません。
- 追加のログの先頭には
LOG:
が付き、Dotfuscator が処理しているアセンブリに関する情報や、ツールを見つけようとするメソッドが含まれます。
- また、コマンド ラインから実行している場合は、引数として
- Windows で Dotfuscator を実行しており、Windows のみの .NET Framework をターゲットとするアセンブリを保護している場合は、適切な .NET Framework SDK をインストールしていることを確認してください。
- Dotfuscator を macOS または Linux で実行している、または .NET 5+、.NET Core 3+、.NET Standard 2.1、Xamarin アセンブリを保護している場合は、インターネットにアクセスできること確認してください。
- Dotfuscator 用に使用する正しい ILdasm および/または ILasm が既にわかっている場合は、ツールの場所の明示的な指定を参照してください。
ビルドからログ出力を見直しても、この問題を修正する手立てがわからない場合は、サポートにお問い合わせください。
ILdasm/ILasm がエラー コード 127 で終了します
Dotfuscator を Linux で実行しているときに次のメッセージでエラーになった場合は、
ildasm returned 127
必要な依存関係ライブラリが存在しない可能性があります。 不足しているライブラリを特定するには、ビルド出力で次のようなメッセージを確認します。
error while loading shared libraries: libunwind.so.8: cannot open shared object file: No such file or directory
この例では、libunwind
ライブラリをインストールする必要があります。
Linux での使用に必要な依存関係ライブラリも含め、Dotfuscator の完全なシステム要件については、NuGet パッケージを参照してください。
Dotfuscator スタック トレースの取得
Dotfuscator でエラーが発生した場合は、コマンド ラインから -v -e
オプション付きで実行することにより、Dotfuscator のスタック トレースを取得します。
DotfuscatorAndroidSigningCertFingerprint エラー
エラー : 改ざんチェックを Xamarin Android アプリケーションに差し込むには、署名証明書の SHA-1 フィンガープリントを指定する必要があります。
MSBuild プロパティの DotfuscatorAndroidSigningCertFingerprint をこの値に設定してください。
このエラーは、アプリケーションへの署名に使用する証明書の SHA-1 フィンガープリントを指定することで修正できます。 この値を指定する方法は 2 つあります。
-
MSBuild ターゲット ファイルを使用して Dotfuscator と統合している場合は、Xamarin Android アプリケーションのプロジェクト ファイルにある
DotfuscatorAndroidSigningCertFingerprint
プロパティの値を設定します。 ご自分のプロジェクト ファイルでこのプロパティを設定する場所の例については、「アプリケーションの保護」ページにある Xamarin セクションを参照してください。 -
別の方法で Dotfuscator と統合している場合、Dotfuscator 構成エディターで
AndroidSigningCertFingerprint
という新たな構成プロパティに値を設定します。
入力割り当てファイルを使用できません
エラー: 入力割り当てファイルは、リストされているメソッドを使用できません。現在の構成では、それらのメソッドはすべて同じ名前であることが要求されるのに、入力割り当てファイルに異なる名前があります。詳細については、ユーザー ガイドの「トラブルシューティング」を参照してください。
エラー: 入力割り当てファイルは、リストされているメソッドを使用できません。現在の構成では、メソッドの名前の変更は許可されていませんが、入力割り当てファイルに新しい名前があります。詳細については、ユーザー ガイドの「トラブルシューティング」を参照してください。
このエラーが表示される場合は、増分難読化で使用している割り当てファイルが、明示的なメソッドのオーバーライドを導入する設定を有効にして作成されています。 設定が削除される前、構成ファイルのバージョンが v2.2 より前であるか、または割り当てファイルが作成されたときに構成ファイルに <option>explicitoverrides</option>
オプションが存在した場合には、この設定は既定でオンになりました。
このエラーを修正するには、現在の入力割り当てファイルを使った増分の名前変更の使用は中止する必要があります。 ただし、現在の割り当てファイルと新しい割り当てファイルの間では名前が異なるので注意してください。
入力割り当てファイルから同じ名前を使用し続ける必要がある場合は、引き続き Dotfuscator 4 を使用します。Dotfuscator 4 で保護される新しいプロジェクトでは、[明示的なメソッドのオーバーライドを導入する]機能を有効にした増分の名前変更を使用しないようにしてください。
System.attributeTargets.System.Runtime エラー
Ubuntu 22 でアプリケーションをビルドしようとすると、対象アセンブリが見つからないため外部の型を読み込めません: System.attributeTargets.System.Runtime という特定のエラーが発生することがあります。
このエラーは、Dotfuscator によるものではなく、Ubuntu システムへの依存関係が欠落していることが原因で発生します。.NET8 のアップデートでは、この欠落している依存関係が原因で、netstandard-targeting-pack-2.1-8.0 と netstandard-targeting-pack-2.1 の間に競合が発生していることを示しています。
この問題を修正するには、netstandard-targeting-pack-2.1-8.0 を削除してから、.NET8 バージョンを再インストールしてください。以下の手順に従います。
- 次のコマンドを使用して netstandard-targeting-pack-2.1-8.0 を削除します。
sudo apt-get remove netstandard-targeting-pack-2.1-8.0
- 次のコマンドを使用して .NET8 を完全に削除します。
sudo apt remove ‘dotnet*’ ‘aspnetcore*’ ‘netstandard*’
sudo apt autoremove
- Microsoft フィードを使用して、Ubuntu 22 に .NET8 SDK を再インストールします。まず、次のコマンドを使用して、Microsoftkey とフィードを登録します。
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
- その後、次のコマンドを使用して .NET8 SDK をダウンロードしてインストールします。
sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y dotnet-sdk-8.0
誤検知 Xamarin 改ざんチェック
Xamarin 改ざんチェックをテストしているときに、アプリケーションが改ざんされていないときでも常に改ざんされているかのように応答する場合は、DotfuscatorAndroidSigningCertFingerprint
がアプリへの署名に使用する証明書の SHA-1 フィンガープリントと一致することを確認します。
また、既定のキーストアの証明書を使用している場合は、SHA-1 フィンガープリントはホストによって異なるため、あるホストのフィンガープリントを使って DotfuscatorAndroidSigningCertFingerprint
の値を構成してから、別のホストでビルドすると、アプリケーションが常に改ざんされたように見えます。 既定のキーストア証明書を使用し続けたい場合は、アプリケーションがビルドされるホスト上で、既定のキーストア証明書の SHA-1 フィンガープリントを使って DotfuscatorAndroidSigningCertFingerprint
が構成されるようにする必要があります。
アクティブ化エラー
このセクションでは、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 はエラーを発行する前に一度、失敗した接続を再試行します。
アクティブ化ツールの問題
Windows インストーラーまたは構成エディターを介したアクティブ化では、Dotfuscator アクティブ化ツールが使用されます。 アクティブ化ツールは、preemptive.com への Web ブラウザーを起動することによって機能します。このページでログインし、Dotfuscator のインストレーションをアクティブ化することができます。 ブラウザーでのアクティブ化手続きが完了すると、ブラウザーから必要な情報がアクティブ化ツールに送り返されてくるので、アクティブ化を確認し、保存することができます。
以下のサブセクションでは、アクティブ化ツールから起こる可能性のある問題の解決方法について詳述します。
アクティブ化ツールが Windows ファイアウォール ダイアログを表示します
アクティブ化ツールはブラウザーから情報を受け取るために、TCP ポートで localhost
ホストをリッスンします。 これにより、次のメッセージを含む[Windows セキュリティの重要な警告]ダイアログがトリガーされます。
すべてのパブリック ネットワークとプライベート ネットワークで、Windows Defender ファイアウォールにより Node.js: サーバーサイド JavaScript の機能のいくつかがブロックされています。
以下のダイアログは、アクティブ化ツールの一部である client-activation-bridge-win.exe
について言及しています。このアプリは Node.js を使用して実行されます。
アクティブ化ツールは localhost
のみをリッスンするため、ファイアウォールの例外を必要としません。
このダイアログは次のようにして安全に閉じることができます。
- すべてのチェック ボックスをオフにします。
- [キャンセル]ボタンをクリックします。
ブラウザー処理の完了後、アクティブ化ツールが続行されません
アクティブ化ツールは Web ブラウザーからの情報を待っている間、次の画面を表示します。
ただし、アクティブ化ツールへのブラウザーの HTTP 要求がブロックされたか、または失敗した場合には、ブラウザーがアクティブ化手続きのフェーズが完了したことを報告していても、ツールは上に示す画面を表示し続けます。
これを解決するには次のようにします。
- Web ブラウザーの成功メッセージでアクティブ化トークンを探し、それをクリップボードにコピーします。
- アクティブ化ツールで、ウィンドウ下部にある "ここをクリックすれば、手動でアクティブ化を行えます" のラベルの付いたハイパーリンクをクリックします。
- 表示される画面で、アクティブ化トークンをフォームに入力して[アクティブ化]をクリックします。
ランタイム エラー
一般的なアドバイス
大部分のアプリケーションは、保護しても、追加されたすべてのチェックを禁止することで、保護されていないバージョンと同じ動作を行います。 ただし、Dotfuscator による難読化によってランタイム エラーが発生するケースがあります。 このようなケースのうち、一部は Dotfuscator のスマート難読化機能の静的分析によって検出できますが、残りのケースを検出するには手動による構成が必要です。
ランタイム エラーは通常、名前の変更による難読化に関係しています。 たとえば、メソッドの名前が含まれる文字列をコードでリフレクション API に渡す場合、この呼び出しは保護を行った後では失敗する可能性があります。その理由は、そのメソッドが Dotfuscator によって名前変更されたのに、その文字列に依然として古い名前が含まれているためです。 この場合、そのメソッドを名前の変更対象から除外するように Dotfuscator を構成することができます。 ランタイム エラーを発見して名前変更からの適切な除外を適用するケース スタディを、名前変更の対象除外の特定で参照してください。
似たエラー/問題が発生するのは、Dotfuscator の除去機能が有効になっているのに、静的分析では実行時に使用されるコードの一部を認識できない場合です。 この種の問題を解決するには、保護されたアセンブリ内の特定のメソッドを常に名前の変更対象にするように Dotfuscator を構成します。
Dotfuscator の除去およびルート チェック機能は、Linux 環境の MAUI ではサポートされていません。
どの変換が問題を起こしていますか?
どの変換が問題の原因となっているかを調査します。
- すべての難読化の変換がオフになっている場合、それは機能しますか?
- すべての入力アセンブリでライブラリ モードが有効になっている場合、それは機能しますか?
- すべての入力アセンブリで XAML の変換がオフになっている場合、それは機能しますか?
- 実行時エラーはほとんどの場合、名前の変更に関係しています。
- 依存するプロパティ:そのプロパティとすべてのバッキング メソッドは、名前の変更対象から除外されていますか?
-
プロパティの対象除外のあらゆる状況に対応できるカスタム規則で機能しますか?
<type name=".\*" regex="true"> <propertymember name=".\*" regex="true"/> </type>
[警告]タブのチェック
[警告]タブにあるすべての警告を確認しましたか?
Dotfuscator のビルドで警告が発生した場合は、構成エディターの下部にある[ビルド出力]セクションにおいて、警告が独自のタブに表示されます。
実行時の例外のキャッチ
実行時の例外をキャッチし、それをメッセージ ボックスに表示して、実際に何が間違っているかを確認します。
保護の強化
Dotfuscator の保護を強化する方法の詳細については、保護の強化を参照してください。
なぜ、こんなに少しのものしか名前が変更されなかったのでしょうか?
アセンブリがライブラリ モードになっている場合、Dotfuscator は、そのアセンブリの公開され利用できるインターフェイスの一部であるものついては、名前を変更しません。
次のような場合には、ライブラリ モードをオフにすることができます。
- アセンブリが、他のアセンブリからライブラリとして利用できるように作られていない場合
- または、ライブラリとそのすべての依存アセンブリを同じ Dotfuscator 構成で一緒に処理する場合
なぜ、設定した変換が実行されないのでしょうか?
変換タブ([名前の変更]、[制御フロー]、[文字列の暗号化]など)のいずれかを開いて、変換のオプションを構成し、Dotfuscator 構成を作成しても、変換の効果があるように見えないことがあります。
これは、変換自体がオフになっている可能性があります。
- [設定]タブを開きます。
- 左側のナビゲーション パネルで[グローバル オプション]を選択します。
- 右側のパネルで[機能]セクションを調べます。
ビルド エージェント
ソリューションから NuGet パッケージの復元
Dotfuscator を Azure Pipelines ビルドに統合した後に、ビルド ステップの 1 つが失敗するようになる可能性があります。 これにより、NuGet パイプライン ステップが成功しているとしても、NuGet がソリューションのパッケージを正常に復元できない問題が生じる可能性があります。 問題が生じているかどうかを確認するには、NuGet Restore パイプライン ステップのコンソール出力を展開して、次のエラー メッセージを探します。
error MSB4019: The imported project "PreEmptive.Dotfuscator.Common.targets" was not found.Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
この場合、MSBuild は Dotfuscator ターゲット ファイルを見つけることができず、プロジェクトの依存関係の一覧を生成する前に終了します。 この問題を解決するには、ビルド サーバー上の、Dotfuscator ターゲット ファイルの場所で、MSBuild を提供する必要があります。
NUGET_RESTORE_MSBUILD_ARGS
環境変数を使用して、正しい場所を MSBuild へ渡すことができます。 このようにするには、次の環境変数を Azure Pipelines ジョブへ追加します。
- 名前:
NUGET_RESTORE_MSBUILD_ARGS
- 値:
-p:DotfuscatorMSBuildDir="<install dir>/PreEmptive.Protection.Dotfuscator.Pro/tools/msbuilddir"
-
<install dir>
はビルド サーバー上の Dotfuscator ターゲット ファイルのパスです。
-
Azure Pipelines の変数の詳細については、Microsoft のドキュメントを参照してください。 ビルド エージェントでの Dotfuscator の使用についての詳細は、ビルド エージェントの該当セクションを参照してください。