MSBuild のターゲット パスを手動で更新しない場合、Visual Studio で、ターゲットが見つからないというメッセージが表示される可能性があります。
The imported project “${Visual Studio Install Path}/MSBuild/PreEmptive/Dotfuscator/6/…” was not found.Confirm that the expression in the Import declaration “${Visual Studio Install Path}/MSBuild/PreEmptive/Dotfuscator/6/…” is correct, and that the file exists on the disk.“{Visual Studio Project File Path}”
これを修正するには、MSBuild のターゲット パスを次のように更新してください。
${Visual Studio Install Path}/MSBuild/PreEmptive/Dotfuscator/7/…
Dotfuscator 7 を使用して .NET アプリケーションの保護を行うには、はじめに下のセクションを参照してください。
Dotfuscator 4 からのアップグレード
PreEmptive Protection - Dotfuscator 6 では、Dotfuscator の機能性とユーザー エクスペリエンスに多くの変更点と新しい機能が導入されています。 このページでは、ビルドの変更が必要になる変更点や、Dotfuscator の出力に影響する変更点について説明します。 変更点の一覧は、変更履歴で入手できます。
ライセンスの検証
Dotfuscator 4 から Dotfuscator 6 にアップグレードした場合、Dotfuscator 6 を実行するためには、少なくとも 1 回は PreEmptive サーバーでライセンスが正しく検証される必要があります。 そのために、Dotfuscator 6 では構成するアクティブなライセンスと、アクティブなインターネット接続が必要です。 このライセンスの検証で問題が発生した場合は、PreEmptive サポートにお問い合わせください。
インストール場所
Dotfuscator 6 のインストーラーは、既存の Dotfuscator 4 のインストレーションを残したまま、新しいバージョンをインストールすることを提案します。 このサイド バイ サイド インストールを容易にするために、Dotfuscator 6 は以前のバージョンの Dotfuscator とは異なる場所にインストールされます。
正しいインストール構成の選択
Dotfuscator 6 のインストール時、インストーラーで Dotfuscator 4 をアンインストールするか、または 2 つを並べてインストールするかどうかを選択できます。 Dotfuscator 4 をアンインストールする前に、Dotfuscator 6 の変更点で注意する必要のあるものがいくつかあります。
Dotfuscator 6 では、Visual Studio の Dotfuscator プロジェクトがサポートされなくなりました。 このようなプロジェクトを使用してアプリケーションを保護していた場合は、Dotfuscator MSBuild ターゲットを使用するよう、下記の手順に従ってアプリケーションを更新することをお勧めします。 既存のプロジェクトを MSBuild ターゲットに移行することを選択した場合は、移行が完了するのを待ってから Dotfuscator 4 をアンインストールしてください。
他の種類のプロジェクトも、Dotfuscator バージョンを明示的に参照できます。 Dotfuscator MSBuild ターゲットまたは Dotfuscator MSBuild タスクを使用している場合、Dotfuscator 6 を使用してアプリケーションを保護するためには、これらの参照を更新する必要があります。
Dotfuscator 4 を保持することを選択した場合は、今までどおり Dotfuscator プロジェクトを使用できます。 ただし、これらのプロジェクトは Dotfuscator 4 でのみ機能します。 また、Dotfuscator は、既存のプロジェクトが Dotfuscator 6 ではなく Dotfuscator 4 を使用していることを警告しません。
さらに、Dotfuscator 6 では、Windows インストーラーを使用したサイド バイ サイド インストールがサポートされなくなりました。 この機能が必要な場合は、Dotfuscator NuGet パッケージを使用します。
アプリケーションのプロジェクト ファイルへの統合
コピーしてプロジェクト ファイルに貼り付ける XML 要素が変更されました。 コピーして貼り付けた古い要素を削除し、新しい XML 要素を挿入する必要があります。
MSBuild ターゲット
既存のプロジェクトは、次の場所にある Dotfuscator の MSBuild ターゲットを参照する可能性があります。
${Visual Studio Install Path}/MSBuild/PreEmptive/Dotfuscator/4/
Dotfuscator 6 を使ってアプリケーションを保護するには、このパスを次のように更新する必要があります。
${Visual Studio Install Path}/MSBuild/PreEmptive/Dotfuscator/6/
Dotfuscator 6 の MSBuild ターゲットには、Dotfuscator 4 からの重大な変更は含まれていません。 何ら影響を受けることなく、Dotfuscator バージョンを更新できます。 Dotfuscator 4 をアンインストールすることを選択した場合は、このパスを更新するまで既存の MSBuild ターゲット プロジェクトはビルドされないことに留意してください。
プロジェクトの Dotfuscator MSBuild ターゲットを有効にしている場合、そのプロジェクトをビルドまたは変更するすべての開発者には、同じバージョンの Dotfuscator がインストールされている必要があります。 Dotfuscator がインストールされていない開発者は、MSBuild が存在しないターゲット ファイルを検出できないため、Visual Studio でプロジェクトを読み込めなくなります。 Dotfuscator をインストールしないで構成済みのプロジェクトを開くには、まずプロジェクト ファイル内の対応するセクションを削除するか、またはコメント アウトする必要があります。
NuGet パッケージ
PreEmptive.Protection.Dotfuscator.Pro
NuGet パッケージには、構成エディターが含まれなくなりました。 NuGet パッケージを使用する開発者は、構成エディターを使用して変更を加える必要がある場合には、Windows インストーラーも使用します。
構成ファイルのアップグレード
Dotfuscator 6 より前に作成されたすべての Dotfuscator 構成ファイルは、アップグレードする必要があります。
コマンド ラインまたは Dotfuscator の MSBuild ターゲットから古い構成ファイルを使って Dotfuscator を実行しようとすると、次のエラーが発生します。
[PreEmptive Analytics]、[Authenticode 署名]、および[明示的なメソッドのオーバーライドを導入する]設定はサポートされなくなりました。構成エディターで Dotfuscator 構成を開いてください。構成が自動的にアップグレードされます。
構成エディターで構成を開くと、次のように通知されます。
[PreEmptive Analytics]、[Authenticode 署名]、および[明示的なメソッドのオーバーライドを導入する]設定はサポートされなくなりました。関連する設定は削除されました。アップグレードされた Dotfuscator 構成を保存してください。
これらのメッセージは、PreEmptive Analytics を使用していない場合でも表示されます。
削除された機能
PreEmptive Analytics
Dotfuscator 6 では、チェックの遠隔測定など PreEmptive Analytics をサポートしません。 チェック(アプリケーション通知およびチェック操作を含む)は引き続きサポートされます。
Dotfuscator 6 を使用するには、構成ファイルをアップグレードして、PreEmptive Analytics の設定を削除する必要があります。
in-code 属性を使用して PreEmptive Analytics を構成していた場合は、それらの設定をソース コードから削除し、入力アセンブリをリビルドする必要があります。そうした後、Dotfuscator 6 はそれらのアセンブリを保護することができます。
サポートされない Visual Studio のバージョン
Dotfuscator 6 では Visual Studio 2010 がサポートされなくなりました
サポートされないアプリケーションの種類
Dotfuscator 6 では以下のアプリケーションの種類がサポートされなくなりました。
- Windows Phone
- WinRT
- Silverlight
- Unity
サポートされない入力
Dotfuscator 6 では以下のファイルの種類がサポートされなくなりました
- ClickOnce
.application
パッケージ - UWP
.appx
パッケージ
Dotfuscator MSBuild ターゲットへの移行をお勧めします。これは使いやすく、信頼性が高いうえ、上に挙げたアプリケーションの種類を引き続き保護することができます。
また、.xap
パッケージを入力として使用することができなくなりました。 これは、Silverlight がサポートされなくなったためです。
Authenticode 署名
Authenticode 署名機能は Dotfuscator から削除されました。 代わりに、Authenticode 署名のビルド後のイベントを使用できます。
以下に、ビルド後の Authenticode 署名イベントの構成の例を示します。 この例は、Dotfuscator のビルドが成功した場合にのみ、出力モジュールごとにイベントを実行します。 以下の値を置き換える必要があります。
-
Sign Tool Dir は、Microsoft 署名ツールへの絶対パスです。 これは、開発者コマンド プロンプトを開いて
where signtool
と入力することで、調べられます。 - 署名に使用する証明書ファイルのパスおよび対応する証明書パスワード。 証明書ファイルのパスには、Dotfuscator 構成ファイルのディレクトリに対する相対パスを示す
${configdir}
を使用できます。 - タイムスタンプ URL は、Authenticode タイムスタンプ サービスの URL です。
<eventlist>
<event type="postbuild">
<option>runoneachmodule</option>
<option>buildsuccessful</option>
<program>
<file dir="[Sign Tool Dir]" name="signtool.exe" />
<environment commandline="sign -fd sha256 -f [証明書ファイルのパス].pfx -p [証明書パスワード] -tr [タイムスタンプ URL] -as ${dotf.current.out.module}" workingdir="" />
</program>
</event>
</eventlist>
PreMark タスク
PreMark MSBuild タスク(保護されたアセンブリからウォーターマークを抽出するタスク)は削除されました。 引き続き、保護されたアセンブリにウォーターマークを埋め込むように Dotfuscator を構成したり、premark
コマンド ライン ツールを使用してウォーターマークを抽出したりすることはできます。
明示的なメソッドのオーバーライドを導入する
名前の変更オプションの[明示的なメソッドのオーバーライドを導入する]は、Dotfuscator から削除されました。 Dotfuscator 6 を使用するには、構成ファイルをアップグレードして、この設定を削除する必要があります。
増分難読化および明示的なメソッドのオーバーライドを使用している場合は、新しい入力割り当てファイルの使用を開始するか、または Dotfuscator 4 を使用し続ける必要があります。 詳細については、トラブルシューティングのページを参照してください。
非推奨の機能
Dotfuscator の .dat ファイルを dotfuscator
実行可能ファイルと同じディレクトリに置く機能の使用は現在推奨されておらず、今後の Dotfuscator のメジャー リリースで動作しなくなります。 この機能を使用している場合は、フローティング ライセンスについて PreEmptive サポートまでお問い合わせください。
Visual Studio 統合
Visual Studio の Dotfuscator プロジェクトは Dotfuscator 6 でサポートされなくなりました。 これらのプロジェクトは Dotfuscator MSBuild ターゲットに置き換えられています。これは使いやすく、信頼性が高いうえ、より多くの種類のアプリケーションを保護することができます。
Dotfuscator Visual Studio プラグインを使用しているプロジェクトがあり、Dotfuscator 6 を使用したい場合は、MSBuild ターゲットを使用するようにプロジェクトを手動でアップグレードする必要があります。 Dotfuscator 4 がインストールされている限り、すべての Dotfuscator Visual Studio プロジェクトは引き続き Dotfuscator 4 を使用し、Dotfuscator 6 では動作しません。
移行方法の選択
残念ながら、Dotfuscator プロジェクトと MSBuild ターゲットでは構成に違いがあるため、移行について万能の解決策はありません。 MSBuild ターゲットを使用するように既存のプロジェクトを更新する場合は、Dotfuscator の各構成の動作方法に注意する必要があります。
Dotfuscator MSBuild ターゲットの詳細については、MSBuild ターゲットの説明を参照してください。 2 つのプロジェクトの構成における最も重要な相違点の要約リストを以下に示します。 また、ほとんどのユーザーで機能するはずの、簡単な一連の移行手順も提供します。
入力管理
Visual Studio の Dotfuscator プロジェクトでは、プロジェクト間の関係を任意に定義できるようになっていました。 すべてのアセンブリを取り込んで、それらをすべて一緒に難読化するように Dotfuscator プロジェクトを構成することができました。 また、Visual Studio プロジェクトの出力は一貫した名前変更を持ち、ダウンストリームのプロジェクトで使用できました。
Dotfuscator MSBuild ターゲットは自動入力管理(AIM)を使用して、Dotfuscator への入力を決定します。 MSBuild ターゲットは、ダウンストリームの依存関係を持たないプロジェクトで構成する必要があります。 AIM はこれらのプロジェクトの依存関係を自動的に判断し、難読化の対象としてこれらのプロジェクトを含めたり除外したりできるようにします。 その後、Dotfuscator はプロジェクト自体とプロジェクトのすべての依存関係を難読化します。
アセンブリを保護対象から除外するには、DotfuscatorIncludeAsInput
プロパティを各アセンブリのプロジェクト ファイルに追加する必要があります。 また、DotfuscatorIncludeAsInput
を使用して、Dotfuscator への入力として外部アセンブリを含めることもできます。この場合、外部アセンブリをメタデータとして Reference
項目に適用します。 ただし、ProjectReference
および PackageReference
項目ではメタデータはサポートされません。これらのいずれかに追加すると、ビルド エラーが発生します。 DotfuscatorIncludeAsInput
の詳細については、MSBuild インターフェイス ページの保護するアセンブリの制御セクションを参照してください。
出力場所
Dotfuscator プロジェクトでは、難読化されたアセンブリは既定で Dotfuscated
共有フォルダーに置かれました。 名前の変更は Dotfuscator プロジェクトで一貫しているので、フォルダー内の難読化されたアセンブリは、Dotfuscated
フォルダー内の他のアセンブリによって参照できました。 しかし、Dotfuscator はビルド処理の一環となり、共通の出力ディレクトリは必要でなくなったため、Dotfuscated
ディレクトリは削除されました。 代わりに、保護されたアセンブリは MSBuild によって設定された場所に保存されます。この場所は通常、bin/Release
ディレクトリです。
Dotfuscator MSBuild ターゲットは、プロジェクト(.csproj
)ファイルで指定されたディレクトリに難読化されたファイルを出力します。 保護されたアセンブリを同じディレクトリに格納したい場合は、その共通ディレクトリを指すように各プロジェクトの出力パスを構成する必要があります。
メモ:複数のプロジェクトが Dotfuscator MSBuild ターゲットで構成されており、共通の依存関係を共有している場合、依存関係の名前変更は出力プロジェクトによって異なる可能性があります。 一貫した依存関係の名前変更を実現する方法についてのアイデアは、移行手順を参照してください。
ビルドのタイミング
Dotfuscator MSBuild ターゲットに移行すると、ビルド中、Dotfuscator がアセンブリを操作するタイミングも変わります。 Dotfuscator プロジェクトは、ビルド処理全体が完了した後にアセンブリを難読化しましたが、MSBuild ターゲットは、ビルド処理中にアセンブリを操作します。
MSBuild ターゲットを使用すると、Dotfuscator はビルド後の処理より前に実行されることになります。 難読化されたアセンブリが、構成したビルド後のタスクに干渉しないようにする必要があります。
Dotfuscator の構成
Visual Studio の Dotfuscator プロジェクトは、Visual Studio プラグイン インターフェイスを使用してプロジェクトごとに保護設定を構成します。 Dotfuscator MSBuild ターゲットを構成するには、有効なプロジェクトごとに独自の構成ファイルが必要です。 その後、スタンドアロンの Dotfuscator Pro 構成エディターを使用して、各プロジェクトの保護設定を個別に設定します。
メモ:構成エディターにプロジェクトのすべての依存関係が表示されない場合は、最初のビルドを実行した後に表示されます。
以前の Dotfuscator Visual Studio 統合では、Dotfuscator プロジェクトをビルドして、保護されたアセンブリを生成する必要がありました。 Dotfuscator MSBuild ターゲットは代わりにビルド処理に統合されるため、標準ビルドのアセンブリが自動的に保護されます。 プロジェクトの構成によって MSBuild ターゲットを有効または無効にすることができるため、保護されたビルドと保護されていないビルドを持つことが可能になります。
アプリケーションの保護ページの既定の統合テンプレートを使用した場合は、Release
構成でのみ Dotfuscator が実行されます。 どのプロジェクト構成を保護するかを設定するには、DotfuscatorEnabled
ターゲット プロパティを変更します。
移行手順
Dotfuscator Visual Studio プロジェクトを MSBuild ターゲットにアップグレードするための単一の解決策はありません。 構成ごとのアセンブリの処理方法によって、各プロジェクトを個別に MSBuild ターゲットに移行する必要があります。
プロジェクトがより大きくより複雑で変更できない場合は、MSBuild ターゲットへの更新方法を PreEmptive サポートにお問い合わせされることを強くお勧めします。 お客様のアプリケーションに最適なオプションの詳細については、インストール構成の選択および最適な移行パスの選択に関するセクションを参照してください。
単純なアプリケーションの移行
アプリケーションに共有ライブラリがない場合、またはアプリケーションの個々のコンポーネントが個別に配布される場合には、MSBuild ターゲットへの移行は非常に簡単です。 次の図は、アプリケーションを保護するために Dotfuscator プロジェクトを使用する場合と Dotfuscator MSBuild ターゲットを使用する場合の概念的相違を示しています。
次の手順に従って、単純なアプリケーションを MSBuild ターゲットに移行します。
-
出力プロジェクトを識別します。 このようなプロジェクトは、ダウンストリームの依存関係がないものであったり、リリースする最終アセンブリ(通常、
.exe
または.dll
ファイル)を生成する可能性の高いものであったりします。メモ:複数の出力プロジェクトが 1 つの共通アセンブリに依存しており、出力を一緒にパッケージしたい場合は、複雑なアプリケーションの移行に関する説明を参照してください。
-
Dotfuscator MSBuild ターゲットを出力プロジェクトに追加します。 これを行うには、アプリケーションの保護の手順に従って、プロジェクト ファイル(通常は
.csproj
)を編集する必要があります。 アプリケーションの保護設定を最適に構成できるように、MSBuild ターゲットの説明を必ず確認してください。 これらの手順の一環として、プロジェクトをビルドし、Dotfuscator 構成ファイルを生成します。 -
生成された Dotfuscator 構成ファイルをアップグレードします。 Dotfuscator プロジェクトに基づく構成ファイルは、MSBuild ターゲットと互換性がありません。 「アプリケーションの保護」の手順により生成された構成ファイルで、難読化の設定を手作業で確認し、更新する必要があります。
-
保護されたプロジェクト(ソリューション全体ではなく)をビルドしてみます。 更新された設定を使ってプロジェクトをビルドする準備ができました。ただし、これはアプリケーションの保護ページの手順が正しく完了していることを前提とします。 既定のプロジェクトの構成を使用している場合は、アプリケーションが正しく保護されるように、
Release
構成を使用してビルドを行ってください。メモ:ソリューション全体をビルドすると、アプリケーションは Dotfuscator によって 2 回保護される可能性があり、それにより予期しない結果を生じる可能性があります。 一度すべての Dotfuscator プロジェクトを削除すれば、再びソリューション全体をビルドすることができます。
この工程で何か問題が発生した場合は、トラブルシューティング ページを参照して問題の解決を試みてください。 問題が解決されない場合は、PreEmptive サポートにお問い合わせください。移行プロセスを完了するお手伝いをいたします。
-
古い Dotfuscator プロジェクト ファイルを削除します。 アプリケーションは現在、ビルド時に自動的に保護されるようになっているので、古い Dotfuscator Visual Studio プロジェクトを安全に削除できます。
複雑な依存関係があるアプリケーションの移行
アプリケーションに複雑な依存関係ツリーおよび複数の出力がある場合には、簡単な解決策はプロジェクトに対して機能しない可能性があります。 これは、ソリューションの中に一緒にパッケージしたい共有の依存関係や複数の出力ファイルがある場合には、特に当てはまります。
このようなプロジェクトの大部分において最も簡単な解決策は、各プロジェクトの出力ディレクトリを共通の出力ディレクトリに設定し、すべての共通ライブラリに対してライブラリ モードを有効にすることです。 この構成を使用すると、各プロジェクトは個別に難読化されたアセンブリのコピーを複数作成し、以前に生成されたコピーを上書きします。 共有アセンブリのライブラリ モードを有効にすることにより、依存アセンブリがあらゆるバージョンの共有アセンブリを問題なく使用できるようになります。
残念ながら、Dotfuscator 6 でサポートされている Dotfuscator Visual Studio プロジェクトとまったく同じものはありません。 MSBuild ターゲットを効果的に使用するために、プロジェクト間の依存関係の一部を変更する必要があるかもしれません。 しかしながら、移行に関して PreEmptive サポートにお問い合わせいただくか、または次のセクションで説明されている修正のいずれかを試してみることをお勧めします。
依存関係を変更せずに Dotfuscator 6 を使用する
アプリケーションで共有アセンブリを単一のフォルダーにパッケージ化する必要がある場合は、空の C# プロジェクトと Dotfuscator MSBuild ターゲットを使用することで、Dotfuscator プロジェクトの動作を模倣できます。 MSBuild ターゲットを使用すると、以下の手順に従って、自動入力管理を用いてすべてのアセンブリとその依存関係を簡単に保護することができます。
-
ソリューションの一部として、空の C# プロジェクトを作成します。 少なくとも、現在ある Dotfuscator プロジェクトと同数の空のプロジェクトを作成する必要があります。 対象プラットフォームに空のプロジェクトがない場合は、クラス ライブラリを作成し、自動生成されたファイルをすべて削除することもできます。
メモ:空のプロジェクトは、実行可能ファイルをビルドすることを想定していないようにしてください。 最も簡単なのは、単に各プロジェクトのビルド出力の種類を
Library
と指定することです。 -
一緒にグループ化する必要のある出力アセンブリを識別します。 これらのアセンブリは、グループ化する範囲内に依存関係がなく、各 Dotfuscator プロジェクトの入力に類似している必要があります。
メモ:Dotfuscator プロジェクトに指定された入力と同数か、またはそれより少ない数の出力アセンブリがある必要があります。 共有ライブラリは、自動入力管理によって自動的に保護されるので、含める必要はありません。
-
出力アセンブリを参照として空のプロジェクトに追加します。 これを行うには、空のプロジェクトの[参照]セクションで右クリックして[参照の追加]を選択するだけです。
-
各空のプロジェクトにアプリケーションの保護の手順を適用します。 Dotfuscator 構成ファイルが Dotfuscator プロジェクトで使用されている設定と一致するように、Pro 版の構成エディターを使用して更新してください。 プロジェクトの依存関係の名前をどれも変更したくない場合は、構成ファイルでそれらを明示的に除外する必要があります。
-
空のプロジェクトをビルドします。 既定の Dotfuscator MSBuild ターゲットの構成を使用している場合、アプリケーションは
Release
構成でのみ難読化されることに留意してください。 保護されたアセンブリは、空のプロジェクトのプロパティで指定された出力ディレクトリに現れます。 既定の場所は${Project Directory}/bin/Release
です。 -
空のプロジェクトによって作成された空のファイルを削除します。 空のプロジェクトは空のライブラリ ファイルを自動的に作成するため、後から
AfterBuild
ステップで削除する必要があります。
これらの手順について疑問点や懸案事項がありましたら、PreEmptive サポートにお問い合わせください。アプリケーションの保護をお手伝いします。