(3) プライベート コンポーネントのパス
前の Client の例では、Client.exe と Stringer.dll が両方とも同じディレクトリに格納されている必要があるという、1 つの大きな弱点があります。しかし、実際には、ディレクトリ構造を使用してコンポーネントを管理した方が都合がよい場合がほとんどです。.NET Framework は、管理者がプライベート コンポーネントの読み込み元のディレクトリを指定できるようにする構成機構を提供します。
前の Client の例のビルドに関して、3_SimplePath サブディレクトリに、プライベート ディレクトリを使用したバージョンのプログラムが含まれています。ソース コードはすべて同じですが、Stringer.dll をビルドして Stringer サブディレクトリに格納することを示すために、ビルド プロセスが変更されています。
csc /target:library /out:Stringer\Stringer.dll
... Stringer\Stringer.cs
csc /reference:Stringer\Stringer.dll ... Client.cs
プログラムのコンパイル時には、/reference: コンパイル オプションによってサブディレクトリ内にあるコンポーネントを検出できますが、実行時には、他のディレクトリにあるコンポーネントをサポートするためには、個別の XML ベースのアプリケーション構成ファイルが必要です。このチュートリアルで説明しているようなクライアント実行可能ファイルの場合、構成ファイルはその実行可能ファイルと同じディレクトリに格納されており、実行可能ファイル名にファイル名拡張子 .config を追加した完全名を持っています。サンプルの Client.exe.config ファイルには、privatePath タグが指定されています。
リスト 1 Client.exe の構成ファイル (Client.exe.config)
<configuration>
<runtime>
<assemblyBinding
xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Stringer"/>
</assemblyBinding>
</runtime>
</configuration>
この構成ファイルが実行可能ファイルと同じディレクトリに配置されると、.NET 環境は実行時にこの privatePath タグを使用して、アプリケーションのディレクトリのほかにコンポーネントを探す場所を判断します。
**メモ **ランタイムは、アセンブリの読み込み時に、そのアセンブリの名前と同じプライベート パスの検索も行います。
参照
プライベート パスを使用するアプリケーションの配置 | (4) 共有コンポーネント | (5) コンポーネントのバージョン管理 | パッケージ化と配置の要約 | 付録 A: パッケージ化および配置の追加情報 | 付録 B: パッケージ化および配置用のツール