参照側プログラムのリビルドが必要となるような DLL の変更について


こんにちは、Visual Studio サポート チームです。

ほとんどの .NET Framework アプリケーション開発プロジェクトでは、プログラムを再利用できるよう、ある程度の機能をひとまとまりにしたクラス ライブラリ (DLL) を開発、参照されているかと思います。今回は、そのような DLL に変更を加えた際に、DLL を参照するプログラム側でも再ビルドが必要になるケースについてご案内します。

DLL に実装されたメソッドの名前や引数などに変更が生じた場合、その DLL を参照するプログラム側でも変更内容に合わせてメソッドの呼び出し方を修正し、リビルドする必要があることはイメージしやすいかと思います。このような変更以外で、一見するとリビルドは必要ないように思われる場合でも、DLL を参照するプログラム側でリビルドが必要な場合があります。

DLL を参照する側のプログラムのリビルドの必要性については、プロジェクトの工数にも影響する重要なトピックですので、本稿が少しでもお役に立てましたら幸いです。

※ 以下にご案内する内容の一部は、製品の仕様として公開させていただいているものではなく、あくまで、現時点の検証に基づくものであり、予告なく変更される可能性もあります。また、リビルドが必要なすべてのケースを網羅していることを保証するものではありません。何卒、ご了承ください。

 

DLL の変更時に参照元のプログラムも再ビルドが必要になるケース

DLL 側で以下の 2 パターンの変更が行われた場合、変更された DLL を参照しなおして参照側プログラムもリビルドする必要があります。特に (1) の定数、デフォルト引数、および名前付き引数の追加/変更については、参照側のリビルドは不要と考えられがちですのでご注意ください。

 

(1) DLL と参照側プログラムの接点部分に変更が生じた場合

DLL に定義された以下の情報は、参照側プログラムのビルド時に参照側にも取り込まれます。このため、DLL 側でこれらに変更が生じた場合、参照側プログラムでも、新しい DLL を参照しなおしてリビルドする必要があります。

 

・定数の値
・列挙型 (型の名前、要素の名前、要素の順番、要素の挿入・削除、など)
・クラス、構造体、インターフェイス (型の名前、要素 (フィールド・プロパティ・メソッド) の名前、要素の削除、メソッドの戻り値の型・デフォルト引数・名前付き引数、アクセス修飾子、など)
・属性 (InternalsVisibleTo、Obsolete、Conditional、etc.) の有無

 

 

(2) DLL のアセンブリ情報に変更が生じた場合

厳密名が付与されたアセンブリ (DLL) の場合、アセンブリ情報が変更されると、参照側プログラムでも、新しい DLL を参照しなおしてリビルドする必要があります。アセンブリ情報には以下のものがあります。

 

・アセンブリ名
・カルチャ
・パブリック キー トークン
・バージョン (特定バージョンの参照を指定している場合)

 

以上となります。
上記内容が開発者の皆様のお役に立てましたら幸いです。

Skip to main content