アセンブリのシャドウ コピー
更新 : 2007 年 11 月
シャドウ コピーを使用すると、アプリケーション ドメインで使用されているアセンブリを、アプリケーション ドメインをアンロードせずに更新できます。この機能は、ASP.NET サイトのような途切れずに稼働させる必要があるアプリケーションに特に役立ちます。
アセンブリが読み込まれるときに共通言語ランタイムがアセンブリ ファイルをロックするため、アセンブリがアンロードされるまでそのファイルは更新できません。アプリケーション ドメインからアセンブリをアンロードする唯一の方法は、アプリケーション ドメインをアンロードすることです。このため、通常の状況では、アセンブリを使用しているすべてのアプリケーション ドメインがアンロードされるまで、ディスク上でアセンブリを更新できません。
アプリケーション ドメインがファイルをシャドウ コピーするように構成されている場合は、アプリケーション パスにあるアセンブリが別の場所にコピーされ、その場所から読み込まれます。このコピーはロックされますが、元のアセンブリ ファイルはロックされず、更新できます。
重要 : |
---|
シャドウ コピーできるアセンブリは、アプリケーション ディレクトリまたはそのサブディレクトリに格納されているアセンブリに限られます。これらのディレクトリは、アプリケーション ドメインが構成されるときに、ApplicationBase プロパティと PrivateBinPath プロパティで指定されます。グローバル アセンブリ キャッシュに格納されているアセンブリは、シャドウ コピーされません。 |
AppDomainSetup クラスのプロパティを使用して、アプリケーション ドメインをシャドウ コピー対応として構成する方法を、次に説明します。
シャドウ コピーを有効にするために、ShadowCopyFiles プロパティを "true" という文字列値に設定します。
既定では、これによってアプリケーション パス内のすべてのアセンブリが、ダウンロード キャッシュにコピーされてから読み込まれるようになります。このキャッシュは、共通言語ランタイムが他のコンピュータからダウンロードされたファイルを格納するために保持しているキャッシュと同じです。共通言語ランタイムは、不要になったファイルを自動的に削除します。
必要に応じて、シャドウ コピーされるファイルのカスタムの場所を、CachePath プロパティおよび ApplicationName プロパティを使用して設定します。この場所を表す基本パスを構成するには、ApplicationName プロパティを、サブディレクトリである CachePath プロパティに連結します。アセンブリは、基本パス自体ではなく、このパスのサブディレクトリにシャドウ コピーされます。
メモ : ApplicationName プロパティが設定されていない場合は、CachePath プロパティが無視され、ダウンロード キャッシュが使用されます。例外をスローすることはありません。
カスタムの場所を指定した場合は、ディレクトリおよびコピーされたファイルが不要になった時点で、それらを手動で削除する必要があります。これらは自動的に削除されません。
シャドウ コピーされるファイルに対してカスタムの場所を設定するのには、いくつかの理由があります。アプリケーションが大量のコピーを生成する場合は、シャドウ コピーされるファイルに対してカスタムの場所を設定する必要が生じることがあります。ダウンロード キャッシュには、有効期間ではなくサイズ上の制限があります。このため、共通言語ランタイムがまだ使用中のファイルを削除しようとする可能性があります。カスタムの場所を設定するもう 1 つの理由は、共通言語ランタイムがダウンロード キャッシュに使用するディレクトリの場所に対する書き込みアクセス権を、アプリケーションを実行するユーザーが持っていない場合があることです。
必要に応じて、シャドウ コピーされるアセンブリを、ShadowCopyDirectories プロパティを使用して制限します。
アプリケーション ドメインに対してシャドウ コピーを有効にすると、既定でアプリケーション パス内、つまり ApplicationBase プロパティと PrivateBinPath プロパティによって指定されるディレクトリ内のすべてのアセンブリがコピーされます。コピーの対象を選択したディレクトリに限定するには、シャドウ コピーするディレクトリのみを含めた文字列を作成し、その文字列を ShadowCopyDirectories プロパティに割り当てます。ディレクトリ間は、セミコロン (;) で区切ります。これで、シャドウ コピーされるアセンブリが、選択したディレクトリ内のアセンブリのみとなります。
互換性のために残されているメソッド
AppDomain クラスには、アプリケーション ドメインでのシャドウ コピーを制御するために使用できる SetShadowCopyFiles または ClearShadowCopyPath などのいくつかのメソッドがありますが、.NET Framework Version 2.0 ではこれらのメソッドは互換性のために残されています。アプリケーション ドメインをシャドウ コピー対応として構成する場合は、AppDomainSetup クラスのプロパティを使用する方法が推奨されます。
参照
参照
AppDomainSetup.ShadowCopyFiles