複数のアセンブリで構成される再利用可能なライブラリを出荷しているが、ファサードを形成しているのはごくわずかである場合、パッケージが開発者のPCにインストールされていれば、アセンブリをGACにインストールすることを検討できます。
想像してみてください。6つのアセンブリを出荷し、これらの6つのアセンブリのうち1つだけにファサードが含まれています。つまり、他の5つはファサード自体によってのみ使用されます。発送します:
- MyProduct.Facade.dll-これは開発者が使用することを目的とした唯一のコンポーネントです
- MyProduct.Core.dll-MyProduct.Facade.dllによって使用されますが、開発者による使用は意図されていません
- MyProduct.Component1.dll-同じ
- MyProduct.Component2.dll-同じ
- ThirdParty.Lib1.dll-MyProduct.Component1.dllによって使用されるサードパーティライブラリ
- ThirdParty.Lib2.dll-同じ
- 等
プロジェクトを使用している開発者は、自分のプロジェクトでMyProduct.Facade.dllだけを参照したいと考えています。ただし、プロジェクトを実行するときは、参照するすべてのアセンブリを再帰的にロードできる必要があります。これはどのように達成できますか?一般に、それらはGACのBinフォルダーのいずれかで使用可能である必要があります。
- 開発者に、インストールフォルダーを見つけて、そこに配置したすべてのN個のアセンブリへの参照を追加するように依頼できます。これにより、実行時に使用できるようにBinフォルダーにコピーされます。
- これらの6つの参照がすでに含まれているVS.NETプロジェクトテンプレートをインストールできます。インストールする前に、アセンブリへの実際のパスをこのテンプレートに挿入する必要があるため、少し複雑です。このパスはインストールパスに依存するため、これはインストーラーによってのみ実行できます。
- 開発者に、必要な依存関係をBinフォルダーにコピーする.csproj/.vbprojファイルに特別なビルド後の手順を作成するように依頼することができます。同じ欠点。
- 最後に、すべてのアセンブリをGACにインストールできます。この場合、開発者はプロジェクトからMyProduct.Facade.dllへの参照のみを追加する必要があります。とにかく、他のすべては実行時に利用可能になります。
注:最後のオプションでは、プロジェクトを実稼働PCに出荷するときに同じことを行うことはできません。すべてのアセンブリをBinフォルダー内に出荷するか、GACにインストールすることができます。すべては希望に応じて異なります。
したがって、説明されているソリューションは、開発中にサードパーティのアセンブリをGACに配置することの利点を示しています。制作とは関係ありません。
お気づきかもしれませんが、GACへのインストールは、主に必要なアセンブリ(依存関係)の場所の問題を解決することを目的としています。アセンブリがGACにインストールされている場合、それは任意のアプリケーションの「近く」に存在すると見なすことができます。これは、.exeへのパスをPATH変数に追加するようなものですが、「管理された方法」で行われます。 -もちろん、これはかなり簡略化された説明です;)