互換性チェック ツール
互換性チェックツールを使用すると、指定されたベースライ ンリリースまたは更新に対して、メタデータの互換性に影響する変更を検出できます。 このように下位互換性を確保します。 Microsoft では、メタデータの互換性確保にこのツールを使用します。
互換性チェックツールは、プラットフォーム更新プログラム 34 の開発ツールの 1 つとして使用できます。 この方法を使用すると、更新プログラムを顧客にインストール、プッシュ配信する前に、ソリューションに旧版のリリースとの下位互換性を持たせることができます。
ツールによって検出される内容
このツールでは、現在のバージョンのメタデータとベースライン バージョンのメタデータが比較されます。 Microsoft が破損を判断してツールに追加したメタデータの変更を検出して報告します。
ツールが検出する互換性を破る変更のリストについては、この記事で後述するツールが検出する互換性を破る変更のリスト セクションを参照してください。
メモ
- この記事の一覧には、ツールが検出できる互換性に影響するすべての変更が含まれているわけではありません。
- このツールでは、互換性に影響するすべての変更を検出できるわけではありません。
ツールで検出されないもの
このツールでは、データの比較によって識別できる、互換性に影響する変更のみが検出されます。 たとえば、次のような場合に発生する可能性のある、互換性に影響する変更は検出されません。
- 保護されたメソッドまたはパブリック メソッドへの参照が削除されます。
- メソッドの責任が変更されます。
ツールの使用
このツールを使用すると、新しいバージョンが置き換えるバージョンに対して持つメタデータの互換性の問題を検出することができます。 Microsoft は、このツールを使用して、新たな月次更新が前回の月次更新と比較してどのような互換性に影響する変更があったかを検出します。
使用状況
CompatibilityChecker.exe -BaselineDirectory=\<Path to baseline metadata\> -CurrentDirectory=\<Path to current metadata\> -ModuleName=\<Module name\> -OutputFile=\<Output file path\> -LogFile=\<Log file path\>
例
CompatibilityChecker.exe -BaselineDirectory="\\servername\archive\Build1\BaselineMetadata" -CurrentDirectory="E:\\MyCode\\retail\\amd64\\BaselineMetadata" -ModuleName="Directory"
-OutputFile="E:\\Logs\\Directory\\Diagnostics.xml" -LogFile="E:\\Logs\\Directory\\Checkerlog.txt"
説明
このツールは、現在のメタデータと指定されたベースラインのメタデータを比較することで、互換性に影響する変更を識別します。
次のパスを指定する必要があります。
- ベースライン ディレクトリ : ベースライン メタデータのパス。
- [現在のディレクトリ ] : 現在の (新しい) メタデータのパス。
- OutputFile : 破損している変更の一覧を含むファイルのパス。
次のルールが適用されます。
- ツールを実行する前に、現在のメタデータをコンパイルする必要があります。
- OutputFile – ファイルには、ツールが識別した互換性に影響する変更のリストが含まれています。
- BaselineDirectory ディレクトリが存在し、指定されたモジュールとその依存関係 (モジュールに依存関係がある場合) のメタデータが必要です。
- BaselineDirectory および currentdirectory のメタデータパスには、 staticmetadata のメタデータを含める必要があります。 このメタデータは、指定したパスの staticmetadata という名前のフォルダに存在する必要があります。
- モデルの無視リストにエントリを追加することで、ツールが識別したすべての互換性に影響する変更を抑制することができます。 このファイルは、モデルの AxIgnoreDiagnosticList フォルダに存在します。
ツールが検出した互換性に影響のある変更の一覧
メモ
メタデータの互換性の変更は、ツールにて互換性に影響ありとして定義されている場合にのみ、互換性に影響のある変更として識別されます。
クラス メンバー
- 保護されたクラス メンバまたはパブリック クラス メンバのアクセスのモディファイアーの変更 (メンバを読み取り専用にすることもできます) : ユーザーがフィールドから読み取ったか、値が割り当てられている可能性があります。
- パブリック レベルまたは保護されたクラス レベルのメンバの削除または名前の変更 : 消費者が、一部の拡張クラスでこれらのメンバを使用している可能性があります。
メソッド
- 保護された方法またはパブリックメソッドのメソッド署名の変更 : その方法の機能は無効になります。
- "保護された方法" または "パブリック" : 消費者がメソッドを無効にしたり無効にしたりします。
クラスおよびインターフェイス
- クラスを最終的な : 顧客は派生タイプを作成した可能性があります。
- クラスの抽象化 : 消費者がクラスをインスタンス化している可能性があります。
- クラスに抽象メソッドを追加 : ユーザーが派生タイプを作成した可能性があります。
- インターフェイスにメソッドを追加する : ユーザーが独自のタイプでインターフェイスを実装した可能性があります。
- パブリック クラスを無効にし、クラスのインスタンス化を停止する : 消費者が、インスタンス メソッドを上書き、ラップ、または購読した可能性があります。
委任
- 署名の変更 : にサブスクライブした可能性があります。
テーブル
次のいずれかの変更を行うと、テーブルの拡張子とテーブルのフィールドに対するテーブル参照が壊れることになります。
- テーブル フィールド、フィールド グループ、インデックス、テーブルのマッピング、テーブルの関連付けを削除または名前変更する
- これらテーブルのプロパティ変更: Extends、SupportInheritance、TableType、SaveDataPerCompany.Yes、SaveDataPerPartition
- これらのテーブル フィールドのプロパティの変更: ExtendedDataType、Scale、文字列サイズ
- 次のテーブル インデックス プロパティを変更する:AllowDuplicates.No または indextype
フォーム
次のいずれかの変更を行うと、コントロールまたはメソッドを参照するフォームの拡張機能が解除されます。
- フォーム コントロール、フォーム データソース、フォーム データソース フィールドの削除または名前の変更。
- メソッドに対して中断するすべての変更は、フォーム メソッドについても中断されます。
列挙 (列挙)
- 次のプロパティの変更:IsExtensible または Value
拡張データ型 (EDTs)
- これらプロパティの変更:Extends、EnumType、Scale
エンティティ
- テーブルに対して中断するすべての変更は、エンティティについても中断されます。
- パブリック エンティティの名前変更。
ラベル (複数)
- ラベルの変更または削除 : 消費者が、ラベル テキストと渡されたパラメータの現在のコンテキストで、そのラベルを使用している可能性があります。 既存のラベルを変更するのではなく、新しいラベルを追加することを推奨します。
申請の要素
- 要素を削除 : 消費者は、要素の存在にコンパイル時の依存関係がある可能性があります。