次の方法で共有


バージョンが管理されたコンポーネントの配置

最新であるか、互換性があることが判明している共有コンポーネントを使用するようにアプリケーションを構成する方法を確認するためには、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: パッケージ化および配置用のツール