Peverify.exe (PEVerify ツール)

PEVerify ツールは、Microsoft Intermediate Language (MSIL) を生成する開発者 (コンパイラの作成者やスクリプト エンジンの開発者など) が、生成する MSIL コードと関連メタデータがタイプ セーフ要件を満たしているかどうかを確認する場合に役立ちます。 一部のコンパイラでは、特定の言語構成を使用しなかった場合にだけ、検査可能でタイプ セーフなコードが生成されます。 このようなコンパイラを使用している場合、コードのタイプ セーフ性が損なわれていないかを確認することが推奨されます。 ファイルに対して PEVerify ツールを実行し、MSIL とメタデータを検査できます。

このツールは、Visual Studio と共に自動的にインストールされます。 ツールを実行するには、、Visual Studio 開発者コマンド プロンプトまたは Visual Studio Developer PowerShell を使用します。

構文

peverify filename [options]

パラメーター

Argument 説明
ファイル名 MSIL とメタデータを検査する対象のポータブル実行可能 (PE) ファイル。
オプション 説明
/break=maxErrorCount maxErrorCount エラーが発生した後で検査を中止します。

このパラメーターは、.NET Framework Version 2.0 以降ではサポートされません。
/clock 次の検査時間をミリ秒単位で計測して報告します。

MD Val. cycle
メタデータ検証サイクル

MD Val. pure
メタデータ検証のみ

IL Ver. cycle
Microsoft Intermediate Language (MSIL) 検証サイクル

IL Ver pure
MSIL 検証のみ

MD Val. cycle 時間および IL Ver. cycle 時間には、必要なスタートアップ手順およびシャットダウン手順を実行するために必要な時間が含まれます。 MD Val. pure 時間および IL Ver pure 時間は、検査または検証だけを行うために要する時間を反映します。
/help このツールのコマンド構文とオプションを表示します。
/hresult エラーコードを 16 進形式で表示します。
/ignore=hex.code [, hex.code] 指定したエラー コードを無視します。
/ignore=@responseFile 指定した応答ファイル内に一覧表示されているエラー コードを無視します。
/il filename で指定したアセンブリに実装されているメソッドに対して、MSIL がタイプ セーフかどうかを検査します。 /quiet オプションを指定した場合を除き、検出された問題ごとに詳細な説明が返されます。
/md filename で指定したアセンブリに対して、メタデータを検証します。 このオプションでは、ファイル内のすべてのメタデータ構造が検証され、検出された問題がすべて報告されます。
/nologo 製品バージョンと著作権情報を表示しません。
/nosymbols .NET Framework バージョン 2.0 では、後方互換性のために行番号は表示されません。
/quiet クワイエット モードを指定します。このモードでは、検査により検出された問題の報告が簡略化されます。 ファイルがタイプ セーフかどうかは報告されますが、タイプ セーフでない場合に、その問題に関する情報は報告されません。
/transparent 透過的なメソッドのみを検証します。
/unique 繰り返し発生するエラー コードを無視します。
/verbose .NET Framework バージョン 2.0 で、MSIL 検証メッセージに追加情報を表示します。
/? このツールのコマンド構文とオプションを表示します。

Remarks

共通言語ランタイムは、セキュリティ機構や分離機構の実施を簡単にするために、アプリケーション コードがタイプ セーフに実行されることに依存しています。 通常、検査可能でタイプ セーフなコード以外のコードは実行できません。しかし、信頼できるが検査を実行できないコードを実行可能にするセキュリティ ポリシーを設定することはできます。

/md/il のいずれのオプションも指定しない場合は、両方の種類の検査が実行されます。 まず、 /md オプションによる検査が実行されます。 エラーが検出されない場合は、 /il オプションによる検査が実行されます。 /md/il の両方のオプションを指定した場合は、メタデータの検査でエラーが検出された場合でも、 /il オプションによる検査が実行されます。 つまり、メタデータの検査でエラーが検出されないときは、peverifyfilenamepeverifyfilename/md/il のいずれを指定しても同じ検査が実行されます。

Peverify.exe は、データ フローの分析と、メタデータの有効性に関する多数の規則のリストに基づいて、MSIL に対する包括的な検査を実行します。 Peverify.exe によって実行される検査の詳細については、Windows SDK の Tools Developers Guide フォルダー内にある "Metadata Validation Specification" (メタデータ検証仕様) と "MSIL Instruction Set Specification" (MSIL 命令セット仕様) を参照してください。

.NET Framework Version 2.0 以降では、dupldsfldaldfldaldelemacallunbox の各 MSIL 命令を使用して指定する検証可能な byref 戻り値をサポートします。

使用例

アセンブリ myAssembly.exe に実装されているメソッドに対して、メタデータの有効性および MSIL がタイプ セーフかどうかについて検査するコマンドを次に示します。

peverify myAssembly.exe /md /il

上記の要求が正常に終了した場合は、次のメッセージが表示されます。

All classes and methods in myAssembly.exe Verified

アセンブリ myAssembly.exe に実装されているメソッドに対して、メタデータの有効性および MSIL がタイプ セーフかどうかについて検査するコマンドを次に示します。 このツールは、これらの検査に要する時間を表示します。

peverify myAssembly.exe /md /il /clock

上記の要求が正常に終了した場合は、次のメッセージが表示されます。

All classes and methods in myAssembly.exe Verified
Timing: Total run     320 msec
        MD Val.cycle  40 msec
        MD Val.pure   10 msec
        IL Ver.cycle  270 msec
        IL Ver.pure   230 msec

アセンブリ myAssembly.exe に実装されているメソッドに対して、メタデータの有効性および MSIL がタイプ セーフかどうかについて検査するコマンドを次に示します。 しかし、Peverify.exe は、最大エラー カウントである 100 に達すると、停止します。 このツールは、指定されたエラー コードも無視します。

peverify myAssembly.exe /break=100 /ignore=0x12345678,0xABCD1234

上記の例と結果は同じですが、無視するエラー コードを応答ファイル ignoreErrors.rsp に指定するコマンドを次に示します。

peverify myAssembly.exe /break=100 /ignore@ignoreErrors.rsp

この応答ファイルには、エラー コードの一覧をコンマで区切って指定できます。

0x12345678, 0xABCD1234

また、エラー コードを 1 行に 1 つという形式で指定することもできます。

0x12345678
0xABCD1234

関連項目