アセンブリの利点

更新 : 2007 年 11 月

アセンブリは、アプリケーションを簡単に配置できるようにし、コンポーネント ベースのアプリケーションで生じやすいバージョン管理の問題を解決するためにデザインされています。

エンド ユーザーや開発者にとって、現在のコンポーネント ベースのシステムでバージョン管理や配置の問題が発生するのは珍しいことではありません。コンピュータに新しいアプリケーションをインストールした途端に既存のアプリケーションが動作しなくなり、困った経験のあるエンド ユーザーもいます。また、多くの開発者は、COM クラスをアクティブにするために、必要なレジストリ エントリをすべて整合させることに大量の時間を費やしてきました。

.NET Framework では、アセンブリを使用することによって、配置に関する多くの問題が解決されています。アセンブリは、レジストリ エントリに依存しない自己記述型のコンポーネントのため、ゼロインパクトのアプリケーション インストールが可能になります。また、アプリケーションのアンインストールやレプリケートも簡略化されます。

バージョン管理の問題

現在、Win32 アプリケーションでは、バージョン管理に関して 2 つの問題が発生しています。

  • バージョン管理規則をアプリケーションのコンポーネント間に適用できず、オペレーティング システムによって強制適用することもできない。現在のアプローチは下位互換性が保証されることを前提としていますが、多くの場合、下位互換性を保証することは困難です。インターフェイス定義は公開した後は静的にしておく必要があり、すべてのコード部分で以前のバージョンとの互換性を維持する必要もあります。さらに、通常は、任意の時点に同じコンピュータ上で存在および実行することのできるバージョンが 1 つしかないようにコードをデザインする必要があります。

  • まとめて構築された複数のコンポーネント セットと、実行時に存在するコンポーネント セットとの間で整合性を維持する方法がない。

バージョン管理に関するこれら 2 つの問題は、相互に結びついて DLL の競合を引き起こします。たとえば、あるアプリケーションをインストールした場合、以前のバージョンとの下位互換性が十分でないソフトウェア コンポーネントや DLL がインストールされると、既存のアプリケーションが動作しなくなる可能性があります。この状況が発生してしまったら、システムで問題を診断して修復することはできません。

DLL 競合からの解放

Microsoft® Windows® 2000 は、これらの問題に本格的に取り組んでいます。Windows 2000 には、DLL 競合を部分的に修復するための 2 つの機能が用意されています。

  • Windows 2000 では、クライアント アプリケーションを作成した場合、依存する .dll ファイルをそのアプリケーションの .exe ファイルと同じディレクトリに配置できます。コンポーネントの絶対パスを確認したり、通常パスを検索したりする前に、.exe ファイルが配置されているディレクトリでコンポーネントの有無を確認するように Windows 2000 を構成できます。これにより、コンポーネントをほかのアプリケーションによってインストールおよび使用されているコンポーネントとは確実に区別できます。

  • Windows 2000 では、オペレーティング システムの System32 ディレクトリに初期状態で含まれているファイルをロックし、アプリケーションのインストール時に、これらのファイルが誤って上書きされないようにしています。

共通言語ランタイムは、このような機能をさらに発展させて DLL 競合の完全な解消を実現するために、アセンブリを使用しています。

アセンブリによるソリューション

バージョン管理の問題や、DLL 競合の原因となる未解決の問題を解決するために、ランタイムでは次の目的でアセンブリを使用しています。

  • 異なるソフトウェア コンポーネント間のバージョン規則を開発者が指定できるようにする。

  • バージョン管理規則を強制的に適用するためのインフラストラクチャを提供する。

  • 同じコンポーネントの複数バージョンを同時に実行できる (side-by-side 実行と呼びます) ようにするためのインフラストラクチャを提供する。

参照

概念

アセンブリのバージョン管理

アセンブリと side-by-side 実行

その他の技術情報

共通言語ランタイムのアセンブリ