最新であるか、互換性があることが判明している共有コンポーネントを使用するようにアプリケーションを構成する方法を確認するためには、2.0 バージョンの両方の Reverser.dll をアセンブリ キャッシュにインストールする必要があります。これには、グローバル アセンブリ キャッシュ ツール (Gacutil.exe) を使用する Build.bat ファイルを使用します。
gacutil.exe /i Reverser.dll
これらの Reverser アセンブリのインストールが完了したら、\WindowsDirectory\Assembly ディレクトリに移動して、キャッシュ ビューア シェル拡張機能を使用してアセンブリ キャッシュを調べることができます。
これで、Reverser コンポーネントのバージョン 2.0.0.0 を指定する対象の VerClient 実行可能ファイルをコンパイルできるようになりました。
csc /reference:Stringer\Stringer.dll;
... Reverser_v2.0.0.0\Reverser.dll VerClient.cs
「(3) プライベート コンポーネントのパス」および「ポリシーのバインディング」で説明したように、アプリケーション構成ファイルを使用して、実行時のアセンブリの検索とバインディングを制御できます。特に、BindingRedirect タグを使用して、元の参照のバージョンをこの新しいバージョンにオーバーライドすることによって、その参照を別のバージョンの厳密な名前付きアセンブリにリダイレクトできます。次のオプションは、バージョン 2.0.0.0 から 2.0.0.9 までのアセンブリ参照については、実行時に代わりに使用するバージョンが 2.0.1.0 であることを示しています。
<bindingRedirect
oldVersion="2.0.0.0-2.0.0.9" newVersion="2.0.1.0"
/>
これによって、管理者はアプリケーションを再コンパイルせずに再構成できます。
5_Versioned サブディレクトリに格納されているサンプルの VerClient.exe.config ファイルは、このオプションを示しています。
リスト 2 VerClient.exe の構成ファイル (VerClient.exe.config)
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Stringer"/>
<publisherPolicy apply="no"/>
<dependentAssembly>
<assemblyIdentity name="Reverser"
publicKeyToken="0038acc8beadf1e5"
culture=""/>
<publisherPolicy apply="no"/>
<bindingRedirect oldVersion="2.0.0.0"
newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
バージョン 2.0.1.0 の Reverser.dll 内の型のメソッドは、意図的にバージョン 2.0.0.0 の同じメソッドとの互換性を持たないように変更されているため、バージョン 2.0.0.0 と互換性のあるクライアントがそれ以降のバージョンを呼び出そうとすると、失敗します。最初は、次のようになっています。
newVersion="2.0.0.0"
この行を次のように変更します。
newVersion="2.0.1.0"
この動作は確認することができ、実際に確認してみると、MissingMethodException がスローされます。より一般的な場合として、この機構によって、同じ共有コンポーネントの別のバージョンを使用する別のアプリケーションが後からインストールされたことによってアプリケーションが中断された場合でも、正常に実行を続行できるようにそのアプリケーションを修復できます。
最後に、アプリケーションをクリーンアップするときには、アセンブリ キャッシュから共有コンポーネント ファイルを削除する必要があります。
gacutil /u reverser
この機構では、アセンブリ キャッシュからコンポーネントのすべてのバージョンが削除されます。コンポーネントがアプリケーションのプライベート パスや、そのコンポーネントと同じ名前のサブディレクトリに残っている場合は、後からそのコンポーネントをその場所から読み込むことができます。
参照
パッケージ化と配置の要約 | 付録 A: パッケージ化および配置の追加情報 | 付録 B: パッケージ化および配置用のツール